Hai solo bisogno di un outer join per includere gli insegnanti con zero studenti.
select t.id, t.name
from teacher t
left join student s on t.id = s.teacher_id
group by t.id
order by count(s.name)
limit 1
Puoi usare la denormalizzazione (una colonna con il numero precalcolato di studenti per insegnante), tuttavia è una cattiva abitudine e non la consiglierei se non è davvero inevitabile.