INTERSECT e EXCEPT para comparação
Encontre linhas comuns e diferentes entre dois conjuntos de dados.
INTERSECT e EXCEPT para comparação é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 3 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.
Os operadores de comparação
INTERSECT e EXCEPT são os operadores de conjuntos usados para comparar dois conjuntos de resultados, em vez de mesclá-los. Os entrevistadores recorrem a eles em perguntas como “quais clientes estão nas duas listas” ou “quais linhas estão em A, mas não em B”.
INTERSECT= linhas presentes nas duas consultas.EXCEPT= linhas presentes na primeira consulta, mas não na segunda.
O que INTERSECT retorna
INTERSECT retorna somente as linhas distintas que aparecem nos dois conjuntos de resultados. Para ser considerada comum, uma linha precisa corresponder em todas as colunas.
Assim como UNION, o INTERSECT simples remove duplicatas e retorna cada linha comum uma única vez.
SELECT customer_id FROM orders_2023
INTERSECT
SELECT customer_id FROM orders_2024;
-- customers who ordered in BOTH yearsO que EXCEPT retorna
EXCEPT (chamado de MINUS no Oracle) retorna as linhas distintas da primeira consulta que não aparecem na segunda. Ele é direcional: A EXCEPT B é diferente de B EXCEPT A.
Essa é a forma natural de encontrar registros ausentes em um segundo conjunto de dados.
SELECT customer_id FROM orders_2023
EXCEPT
SELECT customer_id FROM orders_2024;
-- ordered in 2023 but NOT in 2024 (churned)EXCEPT não é simétrico
Um ponto frequente em entrevistas: EXCEPT é direcional. Trocar as duas consultas responde a uma pergunta diferente.
A EXCEPT B= está em A, não em B.B EXCEPT A= está em B, não em A.
INTERSECT, por outro lado, é simétrico: A INTERSECT B é igual a B INTERSECT A.
-- new customers in 2024 (not seen in 2023):
SELECT customer_id FROM orders_2024
EXCEPT
SELECT customer_id FROM orders_2023;Duplicatas e o padrão DISTINCT
INTERSECT e EXCEPT padrão operam sobre linhas distintas, assim como UNION. As linhas de entrada duplicadas são reduzidas antes da comparação.
Alguns bancos de dados oferecem INTERSECT ALL e EXCEPT ALL, que respeitam a multiplicidade, mas eles são menos comuns. Se o entrevistador não disser ALL, presuma o comportamento de linhas distintas.
SELECT city FROM a
INTERSECT ALL
SELECT city FROM b;
-- multiplicity-aware (Postgres supports this; MySQL 8+ too)Comparando linhas inteiras quanto à igualdade
Ambos os operadores comparam linhas inteiras em todas as colunas selecionadas. Duas linhas são iguais somente quando todas as colunas correspondem. Isso os torna perfeitos para detectar se duas tabelas contêm dados idênticos.
Selecione o conjunto completo de colunas relevantes para que a comparação tenha significado.
SELECT id, name, email FROM prod_users
EXCEPT
SELECT id, name, email FROM staging_users;
-- rows in prod that differ from / are missing in stagingO padrão de diferença entre tabelas nos dois sentidos
Para verificar se duas tabelas são idênticas, execute EXCEPT nos dois sentidos e combine as diferenças. Se o resultado combinado estiver vazio, as tabelas serão exatamente iguais.
Essa é uma resposta clássica em entrevistas sobre validação de dados para verificações de migração e reconciliação.
(SELECT * FROM table_a EXCEPT SELECT * FROM table_b)
UNION ALL
(SELECT * FROM table_b EXCEPT SELECT * FROM table_a);
-- empty result => tables are identicalComo os valores NULL são tratados
Dentro das operações de conjuntos, dois valores NULL são tratados como iguais entre si para fins de correspondência, o que é diferente do comportamento usual de NULL = NULL ser UNKNOWN.
Assim, uma linha com NULL em uma coluna corresponderá a outra linha com NULL na mesma posição. Os entrevistadores verificam isso porque contradiz as regras comuns de comparação.
-- (1, NULL) INTERSECT (1, NULL) -> returns (1, NULL)
SELECT id, region FROM a
INTERSECT
SELECT id, region FROM b;Precedência entre operações de conjuntos
Ao combinar operadores, INTERSECT normalmente tem uma precedência maior que UNION e EXCEPT no padrão SQL. Para evitar ambiguidades, coloque os ramos entre parênteses.
Dizer que você usa parênteses para tornar explícita a ordem de avaliação demonstra maturidade em uma entrevista.
(SELECT id FROM a EXCEPT SELECT id FROM b)
UNION
(SELECT id FROM c);Escolhendo entre INTERSECT/EXCEPT e operações JOIN
INTERSECT e EXCEPT são concisos e comparam linhas inteiras com deduplicação integrada. As operações JOIN são mais flexíveis (você pode retornar colunas adicionais e escolher como tratar as duplicatas).
Prefira os operadores de conjuntos quando a pergunta for simplesmente “quais linhas são comuns ou estão ausentes”. Mude para operações JOIN quando precisar de colunas dos dois lados ou quando o dialeto não oferecer esses operadores.
Reunindo tudo
Um resumo que você pode recitar: "INTERSECT retorna as linhas presentes nas duas consultas e é simétrico; EXCEPT retorna as linhas presentes na primeira, mas não na segunda, e é direcional. Ambos comparam linhas inteiras, tratam NULL como igual e retornam linhas distintas por padrão."
Acrescente a técnica da diferença com EXCEPT nos dois sentidos para a pergunta de acompanhamento sobre reconciliação de dados, e você cobrirá o assunto por completo.
Verificação rápida
Você quer os clientes que fizeram um pedido em 2023, mas que, em 2024, NOT fizeram um (clientes que abandonaram).
Resumo
Principais conclusões:
INTERSECT= linhas presentes nas duas consultas; simétrico.EXCEPT(no Oracle: MINUS) = linhas presentes na primeira, mas não na segunda; direcional.- Ambos comparam linhas inteiras e retornam, por padrão, uma saída distinta.
- Os valores NULL são tratados como iguais para fins de correspondência.
- Um
EXCEPTnos dois sentidos fornece uma diferença completa entre as tabelas.
Perguntas Frequentes
A aula “INTERSECT e EXCEPT para comparação” é grátis?
Sim — o texto completo de “INTERSECT e EXCEPT para comparação” é 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 “INTERSECT e EXCEPT para comparação”?
Encontre linhas comuns e diferentes entre dois conjuntos de dados. 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 3 de 4.
Quanto tempo leva a aula “INTERSECT e EXCEPT para comparação”?
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
- UNION versus UNION ALL
- Compatibilidade de quantidade e tipos de colunas
- INTERSECT e EXCEPT para comparação
- Emulando operações de conjuntos com junções