Diagrama de Venn: o que é, operações entre conjuntos - Toda Matéria
O que é e como fazer na prática
O operador de união pega dois ou mais conjuntos e devolve tudo o que existe em pelo menos um deles. Simples assim. Na notação usual, A B. Se A = {1, 2, 3} e B = {3, 4, 5}, o resultado é {1, 2, 3, 4, 5}. O elemento 3 aparece nas duas, mas só conta uma vez. Conjuntos não repetem membros.
Regra básica: um elemento pertence à união se e somente se pertence ao primeiro conjunto OU ao segundo (ou a ambos). A palavra "ou" aqui é inclusiva, não exclusiva. Isso causa confusão às vezes, porque na linguagem coloquial "ou" muitas vezes soa como "ou isso ou aquilo, não ambos". Em teoria dos conjuntos, ambos entra.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Como calcular conjunto de união passo a passo
Você não precisa de fórmula avançada. O processo é literalmente: listar todos os elementos de todos os conjuntos participantes, jogar numa fila, remover duplicatas, ordenar se for útil para leitura. Pronto.
Na prática, dependendo do contexto, isso pode significar coisas diferentes. Em provas de matemática discreta, você escreve os elementos. Em Python, usa o operador | ou o método .union(). Em SQL, existem funções e operadores que fazem algo semelhante, mas com semântica própria de conjuntos de linhas. Cada ambiente tem suas armadilhas.
Eu costumava resolver isso manualmente no início, listando tudo à mão. Quando os conjuntos cresciam para 50 ou 100 elementos, era fácil errar. Passei a usar scripts pequenos. Um comando rápido de Python resolve em segundos. O ganho real não é só velocidade, é precisão. Erro humano cai drasticamente.
Propriedades que realmente importam
A união é comutativa. A B = B A. Sempre. Não gaste energia worrying com ordem dos operandos. Também é associativa: (A B) C = A (B C). Isso significa que você pode agrupar como quiser, o que é útil quando está processando muitos conjuntos de uma vez.
A identidade é o conjunto vazio. A = A. Nada é adicionado quando você une com o vazio. Isso parece óbvio até você ver alguém escrever código que trata como caso especial desnecessário e introduz bugs sem motivo.
Existe também a propriedade idempotente: A A = A. Unir um conjunto consigo mesmo não muda nada. Se você estiver vendo duplicação de trabalho num algoritmo, considere se a idempotência não deveria estar sendo explorada para otimização.
A intersecção e a união se relacionam por distributividade. A (B C) = (A B) (A C). E o oposto também vale. Isso é útil em provas, mas também aparece em otimização de consultas em bancos de dados e em lógica booleana. Saber que essas leis existem evita que você reescreva expressões complexas do zero.
Um problema real que eu tive e como resolvi
Num projeto de análise de logs, eu precisava unir três conjuntos de IDs de usuários que vinham de fontes diferentes: banco de dados transacional, arquivo de exportação CSV e uma API de terceiros. Cada fonte tinha seu próprio formato e, em alguns casos, IDs duplicados dentro do próprio arquivo.
O problema não era a união em si. O problema era que um dos arquivos tinha o ID "00123" e outro tinha "123". Numericamente são iguais, mas como strings, são diferentes. Se você apenas fizer a união literal, perde a integração desses registros.
Minha solução foi normalizar tudo antes de unir. Converti cada ID para inteiro, removi zeros à esquerda, e só então apliquei a união. O código ficou simples: map(int, id_list) em cada fonte, depois union(). O resultado foi um conjunto único de 14.827 IDs, contra 18.301 somando bruto antes da normalização. Ou seja, cerca de 3.474 duplicações que seriam invisíveis sem essa etapa.
Isso vale para qualquer situação onde a igualdade dos elementos depende de como eles são representados, não do valor em si. CPF, CNPJ, código de produto, numeração de protocolo. Sempre normalise antes.
Armazenamento e performance
Se você for implementar isso em código, conjuntos (sets) são a estrutura natural. Eles usam tabelas hash por baixo, o que torna a inserção e a busca em O(1) em média. A união de dois sets com n e m elementos custa aproximadamente O(n + m). Não é Mágica, é apenas o custo mínimo para ler tudo e verificar duplicatas.
Em Python, set.union() cria um novo set. Isso consome memória extra proporcional ao resultado. Se você estiver unindo dezenas de milhares de conjuntos grandes, prefira .update(), que modifica o set original e evita alocação redundante. A diferença é simples: um cria cópia, o outro trabalha in-place.
Em linguagens mais baixas, como C ou Rust, a decisão entre hash set e árvore balanceada depende do que você precisa. Hash set é mais rápido em média, mas não preserva ordem. Árvore preserva ordenação, mas opera em O(log n) por inserção. Se a ordem dos elementos for relevante para seu fluxo, use ordem. Se for apenas pertinência, use hash.
Quais são as limitações reais
União simples não resolve tudo. Ela não faz deduplicação inteligente baseada em conteúdo. Se seus "elementos" são registros complexos, a igualdade padrão pode não ser suficiente. Eu já vi gente tentar unir listas de objetos sem sobrescrever o método de equalização, e o resultado parecia certo até você analisar os campos internos e perceber que itens semanticamente idênticos estavam aparecendo duas vezes porque o hash era diferente.
Também há o problema da explosão combinatória quando você tenta fazer uniões sucessivas de conjuntos muito grandes em sequência. Cada passo cria um novo conjunto intermediário. Em Python puro, isso gera garbage collection frequente e uso de memória alto. A solução prática é acumular os elementos brutos em uma lista e converter para set só no final, ou usar estruturas que suportam fusão lazy quando o contexto permitir.
Em SQL, a união de tabelas grandes pode ser custosa se não houver índices adequados ou se o otimizador não escolher o plano certo. Às vezes UNION ALL é suficiente se você já sabe que não há duplicação real entre as fontes. UNION força a remoção de duplicatas e isso adiciona custo de sorting ou hashing extra. Escolha com consciência.
Quando a união não é a resposta
Se o seu objetivo é encontrar o que é comum entre grupos, você quer intersecção, não união. Confundir os dois é erro comum e tem consequência direta nos resultados. União amplia. Interseção restringe.
Se você precisa de elementos que estão em A mas não em B, use diferença: A - B. Unir tudo não dá essa informação.
Em bancos relacionais, às vezes o que você chama de "união" na cabeça na verdade é um JOIN. São coisas diferentes. JOIN combina colunas com base em chaves. União combina linhas de resultados. Misturar os conceitos leva a consultas estranhas e lentas.