WHERE - применяется для каждого значения
HAVING - для группы
В целом похожи и можно заменить одно на другое.
П.С. Ориентироваться надо на тот смысл в запросе, который ты вкладываешь.
Текст запроса обязан соответствовать логике получения результата. Исходя из этого - условие должно быть либо во WHERE, либо в HAVING. Есть отдельные случаи, когда можно от этого отойти - но только когда реализуемая логика позволяет подобное.
Реально перемещение условия отбора из WHERE в HAVING используют только в негруппирующих запросах, и только в том случае, когда в условии нужно сослаться на поле выходного набора. Ибо это позволяет не дублировать вычисляющее выражение.