Nie są potrzebne żadne sprzężenia ani rekurencyjne CTE. Standardowym rozwiązaniem luki i wyspy jest grupowanie według (wartość minus numer_wiersza), ponieważ jest to niezmienne w kolejnej sekwencji. Daty rozpoczęcia i zakończenia to tylko MIN() i MAX() grupy.
WITH t AS (
SELECT InfoDate d,ROW_NUMBER() OVER(ORDER BY InfoDate) i
FROM @d
GROUP BY InfoDate
)
SELECT MIN(d),MAX(d)
FROM t
GROUP BY DATEDIFF(day,i,d)