Ordem que você ESCREVE
- SELECT
- FROM
- WHERE
- GROUP BY
- HAVING
- ORDER BY
- LIMIT
➜
Ordem que o banco EXECUTA
- 1 FROM / JOIN
- 2 WHERE
- 3 GROUP BY
- 4 HAVING
- 5 SELECT
- 6 ORDER BY
- 7 LIMIT / OFFSET
Repare: você digita SELECT primeiro, mas ele é um dos
últimos a rodar!
1. FROM vem primeiro
Antes de filtrar, agrupar ou escolher colunas, o banco precisa saber de onde
vêm os dados. Os JOINs também acontecem aqui, montando a tabela de trabalho.
2. WHERE antes de agrupar
O filtro de linhas roda cedo para descartar o que não interessa antes de
agrupar — mais eficiente e necessário, pois os grupos ainda nem existem.
3. WHERE não usa COUNT/SUM, mas o HAVING usa
No momento do WHERE, os grupos ainda não foram formados — então agregações
não existem. Por isso, filtrar por COUNT(*) > 2 é papel do
HAVING, que roda depois do GROUP BY.
4. SELECT quase no fim
Como o SELECT roda tarde, o apelido (AS) que você cria nele
não pode ser usado no WHERE — ele ainda não existe.
Mas o ORDER BY, que vem depois, já pode usar esse apelido.
5. ORDER BY e LIMIT por último
Só faz sentido ordenar e recortar quando o resultado já está pronto. Por isso o
LIMIT pega as N primeiras linhas depois da ordenação.
Pense sempre nesta sequência: de onde vêm os dados (FROM)
→ o que sobra (WHERE) → como agrupo (GROUP BY/HAVING)
→ o que mostro (SELECT) → como ordeno e corto (ORDER BY/LIMIT).