Nejsou potřeba žádná spojení ani rekurzivní CTE. Standardním řešením mezer a ostrovů je seskupení podle (hodnota mínus číslo_řádku), protože to je v rámci po sobě jdoucí sekvence invariantní. Počáteční a koncová data jsou pouze MIN() a MAX() skupiny.
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)