A instrutora usou o seguinte código:
SELECT * FROM produtos GROUP BY nome, preco HAVING preco > ( SELECT AVG(preco) FROM produtos);
Pela explicação da instrutora, entendi que por estar trabalhando com AVG() que é uma estrutura de agregação o ideal seria usar HAVING.
Entretanto AVG está presente na subconsulta e não interfere no HAVING que está na consulta principal ou superior.
Tanto é que o código com WHERE:
SELECT * FROM produtos WHERE preco > ( SELECT AVG(preco) FROM produtos) ORDER by preco);
retorna o mesmo resultado do código com HAVING.
Não consegui entender a necessidade de usar o HAVING no lugar de WHERE, na consulta principal, quando a subconsulta tem uma função de agregação, no caso o AVG()