O motivo pelo qual você não pode usar
SUM()
no WHERE
cláusula é a ordem de avaliação das cláusulas. FROM
informa de onde ler as linhas. Assim que as linhas são lidas do disco para a memória, elas são verificadas quanto ao WHERE
condições. (Na verdade, em muitos casos, as linhas que falham no WHERE
cláusula nem mesmo será lida do disco. "Condições" são formalmente conhecidas como predicados e alguns predicados são usados - pelo mecanismo de execução de consultas - para decidir quais linhas são lidas nas tabelas base. Estes são chamados de acesso predicados.) Como você pode ver, o WHERE
A cláusula é aplicada a cada linha conforme é apresentada ao mecanismo. Por outro lado, a agregação é feita somente após a leitura de todas as linhas (que verificam todos os predicados).
Pense nisso:
SUM()
aplica-se SOMENTE às linhas que atendem ao WHERE
condições. Se você colocar SUM()
no WHERE
cláusula, você está pedindo lógica circular. Uma nova linha passa o WHERE
cláusula? Como eu iria saber? Se for aprovado, devo incluí-lo no SUM
, mas se não, não deve ser incluído no SUM
. Então, como eu avalio o SUM
doença?