Решение left join
.,,но вам нужен список дней.Один метод состоит в том, чтобы генерировать даты и вырезать год:
with dates as (
select cast('2000-01-01' as date) as dte, datename(month, '2000-01-01') as mon, 1 as day, 1 as lev
union all
select dateadd(day, 1, dte), datename(month, dateadd(day, 1, dte)), day(dateadd(day, 1, dte)) lev + 1
from dates
where dte < '2000-12-31'
)
select d.mon, d.day, count(s.birthday_month)
from dates d left join
students s
on s.birthday_month = d.mon and s.birthday_day = d.day
group by d.mon, d.day
order by d.lev
option (maxrecursion 0);