Quem trabalha com SQL inevitavelmente se depara com subconsultas e CTEs (Common Table Expressions). Na comparação CTE vs. Subconsulta SQL, à primeira vista, elas parecem fazer a mesma coisa, mas na prática têm diferenças importantes que podem influenciar tanto a clareza quanto a performance da sua consulta. Nesse artigo, vamos entender o que é uma subconsulta e quando faz mais sentido usar ela ou uma CTE. Além disso, no artigo CTE no SQL Server – CDB Data Solutions, explicamos com mais detalhes sobre o que é uma CTE.
O que é uma Subconsulta?
Uma subconsulta fica dentro de outra consulta principal. Em outras palavras, ela serve para retornar dados intermediários que a consulta principal vai usar quando, por exemplo, aplicar filtros, cálculos ou até mesmo montar colunas.
Na query a seguir, por exemplo, vai exibir todos os clientes cujas compras foram superiores à média geral.
Dois pontos que merecem atenção:
- A consulta principal retorna os clientes.
- A subconsulta calcula a média de compras de todos eles.
Desse modo, o resultado mostra apenas os clientes que ficaram acima da média.
A partir daqui, então, podemos ver as principais diferenças entre uma CTE e uma Subconsulta:
1. Posição no código
- Subconsulta: escrita dentro da consulta principal.
- CTE: escrita antes da consulta principal, com WITH.
2. Nome
- Subconsulta: normalmente não precisa de nome.
- CTE: Precisa ser nomeado.
3. Reutilização
- Subconsulta: usada apenas uma vez.
- CTE: pode ser chamada várias vezes na mesma consulta.
4. Legibilidade
- Subconsulta: boa para consultas pequenas.
- CTE: ótima para relatórios ou consultas complexas.
5. Casos exclusivos
- Subconsulta pode ser usada diretamente no WHERE com IN ou EXISTS, pois você consegue aplicá-la dessa forma, algo que não é possível com CTE.
- Também pode buscar um único valor para ser usado em um UPDATE.
Quando devo utilizar um CTE ou Subconsulta:
- Use a CTE quando a consulta começar a ficar difícil de ler, além disso, quando envolver várias etapas ou quando precisar reutilizar o mesmo conjunto de dados mais de uma vez.
- Use subconsulta quando precisar aplicar um filtro simples ou fazer um cálculo rápido, sem complicações.
Subconsultas e CTEs não competem entre si, cada uma tem seu lugar.
- Subconsulta: ideal para resolver algo rápido e direto.
- CTE: perfeito para organizar, reutilizar e dar clareza em consultas maiores.
Saber escolher entre uma e outra pode tornar seu código SQL não só mais eficiente, mas também muito mais fácil de entender.