Sorry, no time for putting proper comments in there, I hope you can figure it out yourself.
Column N_Date in table Tally contains all sequential dates from '1900-01-01' to '2076-12-31'.
select H.hallId, T.N_Date, DATEADD(n, H.hallStartingTime, T.N_Date) Avail_From, ISNULL(MIN(B.startDatetime), DATEADD(n, H.hallClosingTime, T.N_Date) ) AS Avail_To
-- from beginning of the day to the next appointment
from Halls H
INNER JOIN dbo.Tally T ON T.N_Date >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE())/7*7, 0) AND T.N_Date < DATEADD(dd, (DATEDIFF(dd, 0, GETDATE())/7+1)*7, 0)
left join Hallbooking B ON H.hallId = B.hallId AND B.startDatetime > T.N_Date AND B.startDatetime < T.N_Date+1
AND B.startDatetime > DATEADD(n, H.hallStartingTime, T.N_Date)
GROUP BY H.hallId, H.hallClosingTime, H.hallStartingTime, T.N_Date
UNION
select H.hallId, T.N_Date, ISNULL(MAX(B.endDatetime), DATEADD(n, H.hallStartingTime, T.N_Date)) AS Avail_From, DATEADD(n, H.hallClosingTime, T.N_Date) Avail_To
-- from the last appointment to end of the day
from Halls H
INNER JOIN dbo.Tally T ON T.N_Date >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE())/7*7, 0) AND T.N_Date < DATEADD(dd, (DATEDIFF(dd, 0, GETDATE())/7+1)*7, 0)
left join Hallbooking B ON H.hallId = B.hallId AND B.endDatetime > T.N_Date AND B.endDatetime < T.N_Date+1
AND B.endDatetime < DATEADD(n, H.hallClosingTime, T.N_Date)
GROUP BY H.hallId, H.hallStartingTime, H.hallClosingTime, T.N_Date
UNION
select B1.hallId, T.N_Date, B1.endDatetime AS Avail_From, MIN(B2.startDatetime) Avail_To
-- slots between appointments
from dbo.Tally T
INNER join Hallbooking B1 ON B1.endDatetime > T.N_Date AND B1.endDatetime < T.N_Date+1
INNER JOIN Hallbooking B2 ON B2.hallId = B1.hallId AND B2.startDatetime > B1.endDatetime AND B2.endDatetime < T.N_Date+1
WHERE T.N_Date >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE())/7*7, 0) AND T.N_Date < DATEADD(dd, (DATEDIFF(dd, 0, GETDATE())/7+1)*7, 0)
GROUP BY B1.hallId, B1.endDatetime, T.N_Date
ORDER BY H.hallId, Avail_From, Avail_To
I believe this returns availability slots you were looking for.
_____________
Code for TallyGenerator