Subconsultas escalares em SELECT e WHERE
Conheça subconsultas de valor único e o erro que ocorre quando retornam mais de uma linha.
Subconsultas escalares em SELECT e WHERE é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.
O que o Entrevistador Quer Dizer com Subconsulta Escalar
Uma subconsulta escalar é uma consulta que retorna exatamente uma linha e uma coluna — um único valor. Como ela resulta em um valor, o SQL permite inseri-la em quase qualquer lugar onde um literal poderia ser usado: em SELECT, WHERE, HAVING e até em ORDER BY.
- Os entrevistadores avaliam se você conhece a regra de uma linha e uma coluna.
- A armadilha clássica: uma subconsulta que acidentalmente retorna mais de uma linha.
Se você conseguir expor essa definição com clareza, já terá passado pelo primeiro marco.
Uma Subconsulta Escalar na Lista de SELECT
Inserir uma subconsulta escalar na lista de SELECT permite associar um único valor calculado a cada linha de saída. Aqui, mostramos cada funcionário ao lado do salário médio de toda a empresa.
A subconsulta (SELECT AVG(salary) FROM employees) é executada e reduz a tabela inteira a um número, que então é repetido em cada linha.
SELECT
name,
salary,
(SELECT AVG(salary) FROM employees) AS company_avg
FROM employees;Uma Subconsulta Escalar em WHERE
O mesmo valor único pode determinar um filtro. Uma solicitação muito comum em entrevistas é encontrar todas as pessoas que ganham mais do que a média da empresa.
A subconsulta calcula a média uma vez, e cada linha da consulta externa é comparada com ela. Isso não é correlacionado — a consulta interna não depende da linha externa, portanto é executada uma única vez.
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);O Erro de 'Mais de Uma Linha'
Este é o erro que os entrevistadores querem que você antecipe. Se sua subconsulta for usada com = ou >, mas retornar várias linhas, o mecanismo gera:
- Postgres: mais de uma linha foi retornada por uma subconsulta usada como expressão
- MySQL: a subconsulta retorna mais de uma linha
A consulta abaixo falha porque pode haver vários funcionários no departamento 5 — a subconsulta não é escalar.
SELECT name
FROM employees
WHERE salary = (SELECT salary FROM employees WHERE dept_id = 5);Garantindo que uma Subconsulta Seja Escalar
Duas maneiras confiáveis de garantir um único valor:
- Use uma agregação como
MAX,MINouAVG— as agregações semGROUP BYsempre retornam uma linha. - Use
LIMIT 1(Postgres/MySQL) ouFETCH FIRST 1 ROW ONLYdepois de umORDER BY.
A versão corrigida abaixo solicita o maior salário do departamento 5.
SELECT name
FROM employees
WHERE salary = (
SELECT MAX(salary) FROM employees WHERE dept_id = 5
);Subconsultas Escalares Retornam NULL Quando Não Há Linhas
Um detalhe sutil de entrevistas: se uma subconsulta escalar corresponder a zero linhas, ela não gera um erro — retorna NULL. Esse NULL então se propaga pela comparação.
Como salary > NULL é avaliado como UNKNOWN (não como verdadeiro), a consulta externa não retorna nenhuma linha. É comum que os candidatos esperem um erro aqui; a resposta correta é resultado vazio, sem mensagem.
SELECT name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary) FROM employees WHERE dept_id = 9999
);Exemplo Resolvido: Pessoas Acima da Média e a Diferença
Vamos combinar as duas posições. Mostramos cada pessoa que ganha acima da média e quanto acima dela está. A mesma subconsulta escalar aparece em SELECT e WHERE.
Um entrevistador pode perguntar se a subconsulta é executada duas vezes. Logicamente, ela aparece duas vezes, mas um bom otimizador pode avaliar a subconsulta não correlacionada uma única vez e reutilizá-la.
SELECT
name,
salary,
salary - (SELECT AVG(salary) FROM employees) AS above_avg
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees)
ORDER BY above_avg DESC;Subconsulta Escalar em ORDER BY
Como uma subconsulta escalar é apenas um valor, ela também é permitida em ORDER BY. Essa raramente é a abordagem mais clara, mas os entrevistadores gostam de confirmar que você sabe que ela é permitida.
Aqui, ordenamos os departamentos por um valor obtido de outra tabela — a quantidade de funcionários de cada departamento — sem fazer uma junção.
SELECT d.dept_name
FROM departments d
ORDER BY (
SELECT COUNT(*) FROM employees e WHERE e.dept_id = d.id
) DESC;Escalar ou Correlacionada: Conhecendo a Diferença
O exemplo de ORDER BY acima faz referência discretamente a d.id da consulta externa — isso o torna uma subconsulta escalar correlacionada, executada uma vez para cada linha externa.
Os entrevistadores adoram esta distinção:
- Subconsulta escalar não correlacionada: autocontida, executada uma vez.
- Subconsulta escalar correlacionada: faz referência à linha externa, executada para cada linha.
Ambas continuam sendo escalares (um valor), mas o desempenho é bastante diferente.
Quando NÃO Usar uma Subconsulta Escalar
Uma subconsulta escalar correlacionada na lista de SELECT é conveniente, mas pode ser lenta em tabelas grandes — ela é executada para cada linha. Os entrevistadores esperam que você conheça as alternativas:
- Uma
LEFT JOINcom uma tabela derivada pré-agregada. - Uma função de janela, como
AVG(salary) OVER ().
A versão com função de janela abaixo produz a mesma coluna com a média da empresa sem uma varredura de subconsulta separada.
SELECT
name,
salary,
AVG(salary) OVER () AS company_avg
FROM employees;Frase Curta para a Entrevista
Se pedirem que você defina uma subconsulta escalar, diga isto: "Uma subconsulta escalar retorna uma linha e uma coluna, portanto funciona como um único valor e pode ser usada em qualquer lugar onde um literal seja permitido. Se retornar mais de uma linha, o mecanismo gerará um erro; se não retornar nenhuma linha, produzirá NULL."
Essa única frase abrange a definição, o caso de erro e o caso específico de NULL — os três pontos que todo entrevistador espera ouvir.
Verificação Rápida
Teste sua compreensão sobre o comportamento das subconsultas escalares.
Recapitulação
Agora você domina as subconsultas escalares:
- Definição: uma linha e uma coluna — podem ser usadas como um literal em SELECT, WHERE, HAVING e ORDER BY.
- Várias linhas com =/> causam um erro; garanta que a subconsulta seja escalar usando uma agregação ou
LIMIT 1. - Zero linhas resultam em NULL, que remove linhas silenciosamente em um filtro.
- Subconsultas escalares correlacionadas são executadas para cada linha; prefira junções ou funções de janela quando o desempenho for importante.
Próximo: subconsultas na cláusula FROM, cujo resultado é uma tabela virtual completa.
Perguntas Frequentes
A aula “Subconsultas escalares em SELECT e WHERE” é grátis?
Sim — o texto completo de “Subconsultas escalares em SELECT e WHERE” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.
O que vou aprender em “Subconsultas escalares em SELECT e WHERE”?
Conheça subconsultas de valor único e o erro que ocorre quando retornam mais de uma linha. Você pratica SQL Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Interview Prep?
Nenhuma experiência prévia é necessária. SQL Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Subconsultas escalares em SELECT e WHERE”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Interview Prep?
Sim. Cada aula de SQL Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Subconsultas escalares em SELECT e WHERE
- Subconsultas na cláusula FROM (tabelas derivadas)
- Subconsultas com IN, ANY e ALL
- Desempenho de EXISTS versus IN