Je hebt alleen een outer join nodig om de docenten met nul studenten op te nemen.
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
Je kunt denormalisatie gebruiken (een kolom met het vooraf berekende aantal studenten per leraar), maar het is een slechte gewoonte en ik zou het niet aanraden als het niet echt onvermijdelijk is.