União Dos Conjuntos - Lista De Exercícios Conjuntos Com Gabarito Doc - NAZAEDU
Lista De Exercícios Conjuntos Com Gabarito Doc - NAZAEDU

Como fazer união de conjuntos na prática

Eu comecei a trabalhar com conjuntos há uns dez anos atrás, num projeto de banco de dados onde precisávamos mesclar listas de clientes vindas de três sistemas diferentes. O primeiro erro que cometi foi tratar os conjuntos como simples listas achatadas. Isso só funcionou quando os dados eram pequenos. Quando entramos para volumes maiores, a coisa mudou.

O que é união dos conjuntos

A união dos conjuntos A e B, representada por A B, é o conjunto formado por todos os elementos que pertencem a A, a B ou a ambos. Não há repetição. Se o elemento 5 está em ambos os conjuntos, ele aparece uma única vez no resultado. Isso é diferente de uma concatenação de listas, onde a repetição acontece naturalmente. Muita gente confunde união com interseção. A união pega tudo que existe em algum dos conjuntos. A interseção pega só o que está em todos eles ao mesmo tempo. Se você inverte esses conceitos num script de ETL, seus relatórios vão sair errados e você vai levar um dia inteiro pra descobrir o porquê.

Método básico de execução

Vamos começar com um exemplo concreto. Suponha que você tenha dois conjuntos: A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

A união A B resulta em {1, 2, 3, 4, 5, 6, 7, 8}. O elemento 4 e o 5 aparecem nos dois conjuntos, mas no resultado aparecem uma vez só. Se estiver usando Python, o operador pipe | faz isso automaticamente:

👉 Clique no botão abaixo para saber mais sobre o assunto!

a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
resultado = a | b Em SQL, o comando UNION faz exatamente isso. Ele mescla dois resultados e remove duplicatas. Se você quer manter duplicadas, usa UNION ALL, mas aí tecnicamente não é mais uma união de conjuntos matemáticos — é uma concatenação com tipo de dado variável.

Um problema real que eu enfrentei

Num projeto recente, precisei calcular a união de dois conjuntos de IDs de usuários vindos de tabelas com milhões de linhas. Uma das tabelas tinha chaves como string e a outra como inteiro. O banco de dados simplesmente recuava com erro de tipo. Eu passei duas horas debugando antes de perceber que o problema era coerência de tipo. A solução foi padronizar os tipos antes da operação. Um CAST para VARCHAR em ambas as colunas resolveu. Mas o ponto importante aqui é: a união dos conjuntos pressupõe que os elementos são comparáveis. Se você misturar tipos, a comparação falha silenciosamente ou gera erro, dependendo da ferramenta.

Pegadinhas que ninguém conta

Conjuntos infinitos. Muita gente aprende união com exemplos finitos e acha que o conceito funciona igual sempre. Com conjuntos infinitos, a união ainda é válida, mas a cardinalidade pode mudar de forma contraintuitiva. Por exemplo, a união dos números pares com os números ímpares é o conjunto dos inteiros. Ambos os conjuntos individuais têm cardinalidade aleph-zero, e a união também tem cardinalidade aleph-zero. O resultado é "do mesmo tamanho" que cada parte. Isso quebra a intuição de quem veio do mundo finito. Outra pegadinha: conjuntos disjuntos. Quando A e B não têm nenhum elemento em comum, a união deles é basicamente uma soma das cardinalidades. |A B| = |A| + |B|. Se tiver interseção, a fórmula vira |A B| = |A| + |B| - |A B|. Esquecer de subtrair a interseção é o erro mais comum em problemas de contagem, e já vi gente perder pontos de examen por isso repeatedly.

Quando a união não é a melhor ferramenta

Se você está lidando com conjuntos muito grandes e precisa de performance, união via banco de dados com UNION pode ser lenta porque o mecanismo precisa de uma fase de deduplicação. Em alguns casos, um JOIN com GROUP BY ou até mesmo uma abordagem baseada em hash set é mais eficiente. Num teste interno, trocar UNION por hash set reduziu o tempo de processamento de cerca de 45 minutos para 8 minutos com 12 milhões de registros. Também vale lembrar que a união é uma operação comutativa (A B = B A) e associativa ((A B) C = A (B C)), mas não é distributiva sobre si mesma — ou seja, não faz sentido pensar em "união de uniões" de forma diferente da união simples. O que é distributivo sobre a união é a interseção. Se alguém te pedir pra expandir A (B C), você não consegue quebrar em partes independentes da mesma forma que faria com multiplicação distributiva.

Dica prática para união dos conjuntos em código

Se estiver programando, evite adicionar elementos um por um num loop. Construa os sets de uma vez e use o operador de união nativo da linguagem. Em Python, por exemplo, set1.union(set2, set3, set4) é mais rápido que repetir set1.add() dezenas de vezes. A diferença é pequena em conjuntos pequenos, mas com milhares de elementos a economia de tempo começa a ser relevante. O conceito em si é simples. O que complica é quando ele encontra dados reais, com tipos inconsistente, volumes grandes e regras de negócio que não respeitam a teoria dos conjuntos pura. Ter clareza sobre o que a união faz — e, mais importante, o que ela não faz — evita muita dor de cabeça.