Aucune jointure ou CTE récursif n'est nécessaire. La solution standard d'espaces et d'îlots consiste à regrouper par (valeur moins row_number), car cela est invariant dans une séquence consécutive. Les dates de début et de fin ne sont que les MIN() et MAX() du groupe.
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)