Como usar uma subconsulta dentro de um WHERE?

Subconsultas dentro do WHERE no SQL permitem filtrar registros dinamicamente com base nos resultados de outra consulta.

Como usar uma subconsulta dentro de um WHERE?

Subconsultas dentro da cláusula WHERE permitem filtrar registros com base em resultados de outra consulta, tornando as buscas mais dinâmicas e precisas.

Exemplo de subconsulta dentro do WHERE

Se quisermos listar apenas os clientes que fizeram pedidos acima da média de todos os pedidos:

SELECT nome 
FROM clientes 
WHERE id IN (
    SELECT cliente_id FROM pedidos 
    WHERE valor > (SELECT AVG(valor) FROM pedidos)
);

Aqui, a subconsulta calcula a média de valores dos pedidos, e filtramos apenas clientes que fizeram compras acima dessa média.

Filtrando com EXISTS

Podemos usar EXISTS para verificar se um cliente possui pelo menos um pedido registrado:

SELECT nome 
FROM clientes c 
WHERE EXISTS (
    SELECT 1 FROM pedidos p WHERE p.cliente_id = c.id
);

Essa consulta retorna apenas clientes que possuem pedidos cadastrados.

Usando subconsulta com operadores de comparação

Podemos usar > ou < em subconsultas para definir critérios dinâmicos:

SELECT nome, preco 
FROM produtos 
WHERE preco > (
    SELECT AVG(preco) FROM produtos
);

Aqui, listamos apenas produtos cujo preço está acima da média geral.

Cuidados ao usar subconsultas dentro do WHERE

  • Podem ser mais lentas do que JOINs, especialmente em grandes tabelas.
  • Evite subconsultas aninhadas desnecessárias, pois podem prejudicar a performance.
  • Se a subconsulta retorna múltiplos valores, use IN ao invés de = para evitar erros.

Subconsultas dentro do WHERE são essenciais para criar consultas dinâmicas e filtrar registros com base em cálculos internos. Por exemplo, podemos utilizá-las para listar produtos que estão acima do preço médio, clientes que possuem transações recentes ou até mesmo excluir usuários que não realizaram ações específicas. No entanto, é importante considerar a performance da consulta e avaliar se um JOIN não seria uma alternativa mais eficiente.

Algumas aplicações:

  • Filtrar clientes que realizaram compras acima da média
  • Listar produtos com preços superiores ao valor médio da categoria
  • Selecionar funcionários que receberam salários acima da média
  • Verificar se usuários possuem registros vinculados em outras tabelas
  • Excluir registros que atendem a um critério específico

Dicas para quem está começando

  • Use IN quando a subconsulta retornar múltiplos valores
  • Prefira EXISTS quando apenas precisar verificar a existência de registros
  • Se possível, utilize índices nas colunas filtradas para otimizar a performance
  • Teste a consulta sem a subconsulta primeiro para entender os dados
  • Considere reescrever a consulta usando JOIN se a performance for um problema

Contribuições de Rodrigo Martins

Compartilhe este tutorial: Como usar uma subconsulta dentro de um WHERE?

Compartilhe este tutorial

Continue aprendendo:

Como fazer subconsultas dentro de SELECT?

Subconsultas dentro de SELECT no SQL permitem recuperar informações dinamicamente em tempo de execução, trazendo mais flexibilidade para consultas.

Tutorial anterior

Como fazer uma subconsulta dentro de um FROM?

Podemos usar subconsultas dentro do FROM no SQL para criar tabelas temporárias e realizar operações mais complexas de forma eficiente.

Próximo tutorial