CTE ou subquery?
Intermediário6 min
O problema
A consulta ficou longa e difícil de ler.
Como funciona
CTE nomeia etapas da consulta e permite reuso e leitura em sequência. Subquery serve bem para filtros pontuais.
Exemplo
SQL
WITH vendas_mes AS (
SELECT cliente_id, SUM(valor) AS total
FROM vendas
WHERE data >= DATE '2026-01-01'
GROUP BY cliente_id
)
SELECT c.nome, v.total
FROM vendas_mes v
JOIN clientes c ON c.id = v.cliente_id
ORDER BY v.total DESC;Resultado
Consulta legível, com cada etapa isolada e testável.
Quando usar
- Transformações em várias etapas
- Consultas que a equipe vai manter
Quando evitar
- Quando a CTE é recalculada e prejudica performance em bases grandes
Resolve Melhor
Nomeie CTEs pelo que elas contêm, não por etapa (vendas_mes é melhor que passo1).