Pular para o conteúdo principal

Operadores de conjunto em SQL: um guia completo

Domine os operadores de conjunto em SQL: UNION, UNION ALL, INTERSECT e EXCEPT. Aprenda as regras de sintaxe, veja exemplos práticos e entenda quando usar cada operador.
Atualizado 2 de jun. de 2026  · 11 min lido

As operações de conjunto são a base do SQL e permitem combinar, comparar e filtrar dados de várias fontes. Elas são indispensáveis para tarefas que vão de integração e limpeza de dados até análises avançadas e criação de relatórios.

Neste tutorial, você vai entender o que são operadores de conjunto, como usá-los em SQL, aplicações práticas e muito mais! Se você busca um conteúdo completo para aprender SQL, confira esta trilha de habilidades com sete cursos: SQL Fundamentals.

Se você está com pressa, vamos começar com uma resposta bem curta sobre o que são operações de conjunto em SQL.

Obtenha uma das melhores certificações em SQL

Comprove suas habilidades básicas em SQL e avance em sua carreira de dados.
Obtenha a certificação SQL

O que são operações de conjunto em SQL?

Operações de conjunto em SQL são técnicas para combinar ou comparar os resultados de dois ou mais comandos SELECT. Elas funcionam como operações de conjuntos na matemática, permitindo encontrar a união, a interseção ou a diferença entre as linhas retornadas pelas consultas. Isso as torna essenciais ao analisar dados de múltiplas fontes ou perspectivas.

Aqui vai um panorama rápido das operações principais:

  • UNION: mescla todas as linhas únicas de dois ou mais SELECT, eliminando duplicatas.

  • UNION ALL: mescla todas as linhas de dois ou mais SELECT, mantendo duplicatas.

  • INTERSECT: retorna apenas as linhas que aparecem em ambos os SELECT.

  • EXCEPT: retorna as linhas do primeiro SELECT que não aparecem no segundo.

Comparação com operações da álgebra relacional

A álgebra relacional é um arcabouço teórico que fundamenta o entendimento de consultas a bancos de dados. Ela oferece operações abstratas como projeção, seleção e junção, enraizadas em princípios matemáticos e independentes de sistemas específicos. Pense nela como a lógica "por trás das cortinas" que sustenta nossas interações com bancos de dados.

Os operadores de conjunto no SQL são a implementação prática desses conceitos no ambiente de banco de dados. Eles permitem realizar união, interseção e diferença diretamente sobre os conjuntos de resultados de consultas SQL.

Enquanto a álgebra relacional fornece a base formal das operações, os operadores de conjunto em SQL oferecem uma interface padronizada e amigável para manipulação de dados.

Entender a relação entre operadores de conjunto e operações da álgebra relacional dá clareza sobre os fundamentos teóricos do SQL. Conhecer esse vínculo ajuda você a escrever consultas com um modelo mental mais nítido do que acontece nos bastidores.

Tipos de operadores de conjunto em SQL

Existem três operadores de conjunto principais em SQL:

  • UNION

  • INTERSECT

  • EXCEPT (ou MINUS em alguns dialetos)

Esses operadores correspondem matematicamente a união, interseção e diferença de conjuntos.

Regras para usar operadores de conjunto

Antes de combinar consultas com operadores de conjunto, quatro requisitos precisam ser atendidos. Se algum deles falhar, sua consulta vai retornar erro.

  • Mesmo número de colunas: cada SELECT deve retornar a mesma quantidade de colunas. Se uma consulta retorna três e outra retorna duas, o banco gera erro.

  • Tipos de dados compatíveis: as colunas correspondentes precisam ter tipos compatíveis. Você não pode combinar, na mesma posição, uma coluna VARCHAR de nome com um INTEGER de ID.

  • Mesma ordem das colunas: o SQL mapeia colunas por posição, não por nome. A primeira coluna da primeira consulta casa com a primeira da segunda, independentemente do nome.

  • ORDER BY apenas no final: o ORDER BY deve aparecer uma única vez, no fim da consulta combinada. Não dá para usá-lo dentro de cada SELECT individual.

Mais um detalhe: os nomes das colunas no resultado vêm do primeiro SELECT. Aliases nas consultas seguintes são ignorados, então adicione aliases apenas na primeira consulta se quiser nomes de saída personalizados.

Como usar o operador UNION em SQL

O operador UNION combina os resultados de duas ou mais consultas SELECT em um único conjunto de resultados, removendo linhas duplicadas por padrão.

Por exemplo, suponha que temos duas tabelas, employees e contractors, cada uma com colunas semelhantes como name, department e salary. Para fins de aprendizado, vamos considerar estas duas tabelas fictícias:

employees:

name

department

salary

Alice

Marketing

65000

Bob

Sales

70000

Carol

Engineering

80000

John

HR

55000

contractors:

name

department

salary

David

Marketing

60000

Eva

Sales

68000

Carol

Engineering

75000

Podemos combinar os resultados de ambas as tabelas com o seguinte comando:

-- Usando UNION para combinar todos os employees e contractors
SELECT name, department, salary FROM employees
UNION
SELECT name, department, salary FROM contractors;

Essa consulta seleciona as colunas name, department e salary das tabelas employees e contractors e as combina em um único conjunto de resultados. O operador UNION remove automaticamente linhas duplicadas do resultado final.

name

department

salary

Alice

Marketing

65000

Bob

Sales

70000

Carol

Engineering

80000

John

HR

55000

David

Marketing

60000

Eva

Sales

68000

Repare que a Carol, que aparece nas duas tabelas, é listada apenas uma vez no resultado. Se quisermos manter as duas ocorrências da Carol (com salários diferentes), devemos usar UNION ALL.

UNION vs UNION ALL

O operador UNION não remove valores NULL. Se uma coluna contém NULL em um conjunto de resultados e valores não NULL na coluna correspondente do outro conjunto, os NULL serão mantidos no resultado final produzido por UNION.

Se quisermos incluir valores NULL no conjunto de resultados e evitar sua remoção pelo UNION, podemos usar UNION ALL. Esse operador combina os resultados de múltiplos SELECT, incluindo todas as linhas de cada conjunto, independentemente de serem duplicadas ou conterem NULL.

Como usar o operador INTERSECT em SQL

O INTERSECT retorna apenas as linhas que aparecem em ambos os conjuntos de resultados. Pense nele como encontrar as pessoas que pertencem aos dois grupos.

Vamos usar INTERSECT nas tabelas acima. Para simplificar, vamos consultar apenas as colunas de nome e departamento:

-- Usando INTERSECT para encontrar funcionários em comum
SELECT name, department FROM employees
INTERSECT
SELECT name, department FROM contractors;

Essa consulta seleciona as colunas name e department das tabelas employees e contractors e retorna somente as linhas que existem em ambas as tabelas considerando todas as colunas selecionadas.

name

department

Carol

Engineering

O INTERSECT lida com valores NULL segundo as regras padrão de comparação, considerando NULL iguais ao comparar colunas correspondentes. Ele também resulta em conjunto vazio ao lidar com conjuntos de resultados vazios.

Em outras palavras, se um NULL estiver presente em um conjunto e a coluna correspondente no outro conjunto tiver um valor não NULL, as linhas não são consideradas iguais – e não serão incluídas na interseção.

Além disso, se um dos conjuntos passados ao INTERSECT estiver vazio, o resultado geral também será vazio. Não há linhas em comum entre um conjunto vazio e qualquer outro.

Como usar o operador EXCEPT em SQL

O EXCEPT retorna as linhas do primeiro conjunto de resultados que não estão no segundo.

No Oracle Database, EXCEPT é escrito como MINUS; nos demais grandes dialetos (PostgreSQL, SQL Server, MySQL 8.0.31+, SQLite) usa-se EXCEPT.

Por exemplo, vamos executar a consulta a seguir:

-- Usando EXCEPT para encontrar employees que não são contractors
SELECT name, department, salary FROM employees
EXCEPT
SELECT name, department, salary FROM contractors;

As colunas name, department e salary são selecionadas da tabela employees e retornam apenas as linhas que não existem na tabela contractors.

name

department

salary

Alice

Marketing

65000

Bob

Sales

70000

John

HR

55000

O EXCEPT também segue as regras padrão para lidar com valores NULL. Quanto a conjuntos vazios, o resultado é vazio se o primeiro conjunto estiver vazio; se o segundo estiver vazio, o resultado inclui todas as linhas do primeiro conjunto.

Operadores de conjunto em SQL: performance e otimização

O impacto dos operadores de conjunto no desempenho das consultas pode variar conforme o tamanho dos dados envolvidos, a complexidade das consultas e o sistema de gerenciamento de banco de dados (SGBD) utilizado.

Vamos detalhar os principais fatores e estratégias de otimização.

Volume de dados e complexidade da consulta

Ao trabalhar com grandes volumes, operadores de conjunto podem impactar bastante a performance, porque o tamanho dos resultados a serem combinados, intersectados ou comparados aumenta o tempo de processamento necessário.

Consultas complexas, com múltiplas subconsultas, joins ou operadores de conjunto, podem gerar sobrecarga adicional e afetar a performance. Operações encadeadas ou aninhadas tendem a agravar esse efeito.

Indexação e técnicas de otimização

Indexar corretamente as colunas envolvidas nas operações de conjunto pode melhorar significativamente a performance. Índices ajudam o mecanismo do banco a localizar e recuperar linhas relevantes mais rápido, reduzindo varreduras completas de tabela e acelerando a execução.

Para melhorar consultas com operadores de conjunto, administradores e desenvolvedores podem aplicar reescrita de consultas, análise de planos de execução e otimização de schema. Técnicas como cache de consultas e views materializadas também podem pré-computar e armazenar resultados de consultas complexas, reduzindo o custo computacional.

Mecanismo do banco e recursos de hardware

A performance das operações de conjunto varia conforme o mecanismo do banco e suas capacidades de otimização. Diferentes SGBDs adotam estratégias e algoritmos distintos, o que pode gerar variações de desempenho.

A disponibilidade de recursos de hardware, como CPU, memória e I/O de disco, também influencia o desempenho de consultas com operadores de conjunto. Recursos adequados ajudam a mitigar gargalos e garantem uma execução eficiente.

Operadores de conjunto na prática

Os operadores de conjunto não são apenas conceitos teóricos; eles têm usos reais que podem influenciar decisões de negócio. Vamos ver um exemplo simplificado de como uma empresa pode usar esses operadores para segmentar sua base de clientes em campanhas de marketing direcionadas.

O cenário

Imagine uma empresa que vende online e em lojas físicas. Ela possui dois conjuntos de dados separados:

  1. Compras online: ID do cliente, histórico de compras, dados demográficos e localização dos clientes online.
  2. Transações em loja: informações semelhantes para clientes que compraram presencialmente.

Usando operadores de conjunto

Para ter uma visão completa de todos os clientes, a empresa usaria UNION para combinar os dois conjuntos em uma única tabela, removendo duplicatas. Assim, obtém uma visão unificada de toda a base.

Em seguida, poderia usar INTERSECT para identificar clientes que compraram online e na loja. Esse segmento é especialmente valioso por ter alto engajamento com a marca em vários canais.

Para encontrar oportunidades de promoção cruzada, a empresa poderia usar EXCEPT. Por exemplo, SELECT * FROM online_purchases EXCEPT SELECT * FROM in_store_transactions encontra clientes que compraram apenas online, mas não na loja. Depois, é possível direcionar esses clientes com ações que incentivem a visita a uma unidade física.

Além da segmentação

Com esses segmentos definidos, a empresa pode ir além, refinando-os por fatores como demografia ou histórico de compras. Esse entendimento mais granular permite personalizar campanhas com muito mais precisão.

Operadores de conjunto vs. JOINs

Tanto os operadores de conjunto quanto os JOINs em SQL combinam dados de múltiplas consultas, mas funcionam de forma diferente. A pergunta central é se você quer combinar linhas ou colunas.

Recurso Operadores de conjunto JOINs
Combina Linhas (empilha consultas verticalmente) Colunas (alarga as linhas horizontalmente)
Requer Mesma contagem de colunas e tipos de dados compatíveis Uma coluna-chave compartilhada entre as tabelas
Use quando For para mesclar conjuntos semelhantes, encontrar sobreposições ou diferenças entre resultados For para enriquecer uma linha com dados relacionados de outra tabela
Tratamento de duplicatas UNION remove duplicatas; UNION ALL as mantém Depende do tipo de join e dos dados
Tipos UNION, UNION ALL, INTERSECT, EXCEPT/MINUS INNER, LEFT, RIGHT, FULL OUTER, CROSS

Limitações e considerações dos operadores de conjunto

Ao usar operadores de conjunto em SQL, é essencial considerar limitações e fatores que podem afetar performance, precisão dos resultados e usabilidade.

Compatibilidade de tipos e valores NULL

As colunas correspondentes nos resultados precisam ter tipos de dados compatíveis. Verifique a compatibilidade antes de combinar consultas. Incompatibilidades geram erros fáceis de passar despercebidos.

Operadores de conjunto podem tratar NULL de forma diferente dependendo do SGBD e do operador específico. Para evitar surpresas, é importante entender como NULL é tratado.

Impacto na performance e linhas duplicadas

Operações de conjunto podem impactar bastante a performance, especialmente em conjuntos grandes ou complexos. Fatores como indexação, otimização de consultas e recursos de hardware influenciam o desempenho. Técnicas de otimização e ajustes finos são essenciais para mitigar gargalos.

Por padrão, operadores de conjunto removem linhas duplicadas do resultado. Porém, em alguns casos pode ser necessário mantê-las. É importante entender o comportamento em relação a duplicatas e aplicar as técnicas adequadas quando preciso.

Ordenação dos resultados e restrições de memória

Operadores de conjunto não garantem a ordem do resultado final. Para ordenar o conjunto combinado, adicione uma cláusula ORDER BY no fim de toda a consulta, após o último SELECT.

Essas operações podem consumir bastante memória e recursos, principalmente com grandes volumes. É preciso considerar limitações de memória e recursos para evitar degradação de performance ou instabilidade.

Complexidade, manutenção e compatibilidade entre SGBDs

Consultas complexas com múltiplos operadores de conjunto, subconsultas e joins podem ser difíceis de entender, manter e depurar. Para melhorar legibilidade e manutenção, mantenha consultas concisas, bem documentadas e modulares.

Operadores de conjunto podem variar em sintaxe e comportamento entre diferentes sistemas. Conhecer essas diferenças é vital ao escrever SQL com compatibilidade entre plataformas.

Considerações finais

Operadores de conjunto resolvem um problema específico: combinar ou comparar conjuntos de resultados sem saber de antemão quais linhas se sobrepõem.

Eles abrangem UNION, INTERSECT e EXCEPT: os três operadores para combinar, comparar e subtrair conjuntos de resultados.

Para se aprofundar, confira o curso Joining Data in SQL.

Perguntas frequentes sobre operadores de SQL

Qual é a diferença entre UNION ALL e UNION?

UNION ALL inclui todas as linhas de ambas as consultas, mesmo que sejam duplicadas. UNION elimina as duplicatas.

Como o UNION é diferente de JOIN em SQL?

UNION combina resultados verticalmente, anexando linhas de uma consulta à outra. JOIN combina tabelas horizontalmente, casando linhas com base em uma coluna relacionada e criando um resultado mais largo.

Há considerações de performance ao usar operações de conjunto?

Operações de conjunto podem ser custosas computacionalmente, principalmente com grandes volumes de dados. É importante otimizar as consultas individuais e usar índices sempre que possível para melhorar a performance.

Qual é a diferença entre EXCEPT e NOT IN?

EXCEPT e NOT IN podem produzir resultados semelhantes, mas se comportam de forma diferente com valores NULL. EXCEPT trata NULL como iguais ao comparar linhas, então dois NULL na mesma posição de coluna farão a linha ser excluída. Já NOT IN não retorna nenhuma linha se a subconsulta contiver qualquer NULL, porque comparações com NULL são indefinidas em SQL. Em grandes conjuntos, EXCEPT também pode ser mais legível do que uma subconsulta correlacionada com NOT IN.

Posso usar ORDER BY com operadores de conjunto?

Sim, mas apenas uma vez, no fim de toda a consulta. Você não pode usar ORDER BY dentro de SELECT individuais em uma operação de conjunto. Para ordenar o resultado combinado, adicione uma única cláusula ORDER BY após o último SELECT.

Exemplo:

SELECT name FROM employees
UNION
SELECT name FROM contractors
ORDER BY name ASC;

O MySQL suporta INTERSECT e EXCEPT?

O MySQL adicionou suporte a INTERSECT e EXCEPT na versão 8.0.31. Se você usa uma versão mais antiga, será preciso emulá-los: use um INNER JOIN ou subconsulta com IN para replicar INTERSECT, e um LEFT JOIN ... WHERE IS NULL ou subconsulta NOT IN para replicar EXCEPT. No Oracle, usa-se MINUS em vez de EXCEPT.


Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn
Tópicos

Aprenda mais sobre SQL!

Programa

Engenheiro de dados associado em SQL

30 h
Aprenda os fundamentos da engenharia de dados: projeto de banco de dados e armazenamento de dados, trabalhando com tecnologias como PostgreSQL e Snowflake!
Ver detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

Tutorial

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Como usar GROUP BY e HAVING no SQL

Um guia intuitivo para você descobrir os dois comandos SQL mais populares para agregar linhas do seu conjunto de dados
Eugenia Anello's photo

Eugenia Anello

Tutorial

Introdução aos acionadores SQL: Um guia para desenvolvedores

Saiba como usar os acionadores SQL para automatizar tarefas, manter a integridade dos dados e melhorar o desempenho do banco de dados. Experimente exemplos práticos como os comandos CREATE, ALTER e DROP no MySQL e no Oracle.
Oluseye Jeremiah's photo

Oluseye Jeremiah

Tutorial

Como usar a função COALESCE() no SQL (com exemplos)

Saiba como usar a função SQL COALESCE() para lidar com valores nulos, combinar colunas e limpar seus dados com exemplos e dicas do mundo real.
Travis Tang 's photo

Travis Tang

Tutorial

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

Tutorial

SELEÇÃO de várias colunas no SQL

Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
DataCamp Team's photo

DataCamp Team

Ver maisVer mais