Olá a todos, gostaria de entender a diferença entre usar o WHERE e o HAVING. Antes de verificar a resposta do instrutor, construi meu código e utilizei o HAVING após o GROUP BY, como orientado anteriormente no curso. O resultado das querys foi idêntico.
Comparando os tempos de resposta entre os códigos, percebi que o do instrutor (WHERE), tem uma velocidade de execução dobrada em relação ao meu (HAVING).
Há alguma explicação para isso ocorrer e qual o impacto em códigos mais complexos?
Seguem os códigos:
HAVING
SELECT YEAR(A.DATA_VENDA) AS ANO, FLOOR(SUM(B.QUANTIDADE * B.PRECO * A.IMPOSTO)) AS FATURAMENTO
FROM notas_fiscais A INNER JOIN itens_notas_fiscais B
ON A.NUMERO = B.NUMERO
GROUP BY ANO
HAVING ANO = 2016;
WHERE
SELECT YEAR(DATA_VENDA), FLOOR(SUM(IMPOSTO * (QUANTIDADE * PRECO)))
FROM notas_fiscais NF
INNER JOIN itens_notas_fiscais INF ON NF.NUMERO = INF.NUMERO
WHERE YEAR(DATA_VENDA) = 2016
GROUP BY YEAR(DATA_VENDA)