Чтобы понять, что у студента Mark=5 -- минимальный, нужно сгруппировать значения, вдруг не минимальный (помимо проверки -- есть он или нет).
То есть чтобы полностью ваше условие проверить, нужно точно группировать, WHERE просто проверит -- есть такое значение или нет и выведет студентов, у которых есть
WHERE же используется движком на момент выборки, физически не возможно узнать минимальное значение
HAVING же уже работает с агрегирующими функциями, то есть мы сгруппировали, посчитали нужной функцией (минимальное значение в вашем случае), а HAVING уже выдал с условием этого подсчета