HAVING
opera na linha resumida - WHERE
está operando em toda a tabela antes do GROUP BY
é aplicado. (Você não pode colocar GROUP BY
à parte, HAVING
é uma cláusula reservada para uso com GROUP BY
- deixando de fora o GROUP BY
não altera a ação implícita que está ocorrendo nos bastidores). Também é importante observar que, por causa disso,
WHERE
pode usar um índice enquanto HAVING
não podes. (Em conjuntos de resultados desagrupados super triviais, você poderia teoricamente usar um índice para HAVING
, mas nunca vi um otimizador de consulta realmente implementado dessa maneira).