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:

📚 Baseoteca SQL

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Solicitar exportação de dados

Use este formulário para solicitar uma cópia de seus dados neste site.

Solicitar a remoção de dados

Use este formulário para solicitar a remoção de seus dados neste site.

Solicitar retificação de dados

Use este formulário para solicitar a retificação de seus dados neste site. Aqui você pode corrigir ou atualizar seus dados, por exemplo.

Solicitar cancelamento de inscrição

Use este formulário para solicitar a cancelamento da inscrição do seu e-mail em nossas listas de e-mail.