Inga anslutningar eller rekursiva CTE:er behövs. Standardlösningen mellan luckor och ö är att gruppera efter (värde minus radnummer), eftersom det är invariant inom en på varandra följande sekvens. Start- och slutdatumen är bara MIN() och MAX() för gruppen.
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)