
Essa é uma dúvida comum — mas mal feita.
A maioria das pessoas pergunta:
“Quando usar subquery, JOIN ou CTE?”
E espera uma resposta tipo:
- “Use JOIN para isso”
- “Use subquery para aquilo”
- “CTE é melhor quando…”
Mas na prática, não funciona assim.
👉 Não existe resposta pronta.
Existe decisão baseada no problema.
O erro está na pergunta
Você não deveria perguntar:
“Qual comando usar?”
Você deveria perguntar:
“Qual é a forma mais clara de resolver esse problema?”
O mesmo problema, três formas diferentes
Vamos pegar um caso simples:
Clientes que fizeram pelo menos 3 pedidos
Usando subquery
SELECT
ID_CLIENTE
FROM (
SELECT
ID_CLIENTE,
COUNT(*) AS QTD_PEDIDOS
FROM pedido
GROUP BY ID_CLIENTE
) t
WHERE QTD_PEDIDOS >= 3;Utilizando JOIN (com agregação)
SELECT
p.ID_CLIENTE
FROM pedido p
GROUP BY p.ID_CLIENTE
HAVING COUNT(*) >= 3;Usando CTE
WITH pedidos_cliente AS (
SELECT
ID_CLIENTE,
COUNT(*) AS QTD_PEDIDOS
FROM pedido
GROUP BY ID_CLIENTE
)
SELECT
ID_CLIENTE
FROM pedidos_cliente
WHERE QTD_PEDIDOS >= 3;👉 Os três resolvem o mesmo problema.
Então qual está certo?
👉 Depende.
O que realmente muda na escolha
Não é performance. Não é “nível avançado”.
É:
👉 clareza do raciocínio
Quando usar subquery
Use quando:
- a lógica é simples
- você precisa de um filtro rápido
- não vai reutilizar a lógica
👉 É direto.
Mas pode ficar confuso se crescer demais.
Quando usar JOIN
Use quando:
- você já está trabalhando com várias tabelas
- a agregação é parte natural da query
- não precisa separar etapas
👉 É enxuto.
Mas pode perder clareza se ficar denso.
Quando usar CTE
Use quando:
- existe mais de uma etapa lógica
- você quer separar o raciocínio
- a leitura da query importa
👉 É organização.
Mas vira excesso se usado sem necessidade.
O erro mais comum
Muita gente faz isso:
- aprende CTE → usa em tudo
- aprende subquery → evita JOIN
- aprende JOIN → evita tudo
👉 Escolhe ferramenta por hábito, não por necessidade.
O critério profissional
Antes de decidir, pergunte:
- Essa query tem mais de uma etapa?
- Essa lógica precisa ser separada?
- Isso está fácil de entender?
- Eu conseguiria explicar isso para alguém?
Clareza > “forma certa”
Uma query boa não é a mais curta.
Nem a mais “avançada”.
👉 É a que:
- faz sentido
- é legível
- pode ser explicada
- evita erro
O que esse tema realmente revela
Se você está travado entre opções:
👉 o problema não é o comando
👉 é falta de clareza do problema
Como evoluir nisso
Você melhora essa decisão quando:
- resolve problemas diferentes
- vê a mesma lógica em formas distintas
- entende impacto de cada escolha
👉 Isso vem de prática com contexto.
Próximo passo natural
Se você quer desenvolver essa capacidade de decisão:
🎯 A Arte da Query te coloca exatamente nesses cenários onde você precisa escolher, não só executar
E para testar essas abordagens com dados reais:
0 Comentários