Unindo Mundos: Guia Prático de UNION
e JOIN
s em SQL
No mundo real, seus dados não vivem em uma única tabela gigante. Eles estão organizados e "normalizados" em tabelas separadas e relacionadas (Clientes, Pedidos, Produtos, etc.). Mas como juntamos tudo isso para criar um relatório útil?
Existem duas maneiras de combinar dados de múltiplas tabelas, e elas são fundamentalmente diferentes.
Analogia: Pense que você tem planilhas do Excel. * UNION
é o ato de "empilhar" uma planilha embaixo da outra. * JOIN
é o ato de usar o "PROCV (VLOOKUP)" para enriquecer uma planilha com dados de outra.
1. Empilhando os Dados (O Operador UNION
)
- O que faz? O
UNION
combina o resultado de duas ou mais instruçõesSELECT
em um único conjunto de resultados, colocando as linhas umas sobre as outras. - Analogia: "Copiar todas as linhas da planilha
Vendas_2025
e colar no final da planilhaVendas_2024
para criar uma lista mestra." - A Dor que Resolve: "Eu tenho uma tabela de
clientes_ativos
e uma declientes_inativos
. Como eu consigo uma lista de e-mails de todos os clientes para um comunicado geral?"
As Regras de Ouro do UNION
:
- O número de colunas em todas as instruções
SELECT
deve ser o mesmo. - Os tipos de dados em cada coluna correspondente devem ser compatíveis.
Exemplo:
SELECT nome, email FROM clientes_ativos
UNION
SELECT nome, email FROM clientes_inativos;
INSIGHT PODEROSO (
UNION
vs.UNION ALL
): Por padrão, oUNION
remove automaticamente as linhas duplicadas do resultado final. Se você tem certeza de que não há duplicatas ou não se importa com elas, use oUNION ALL
. Ele é muito mais rápido porque não gasta tempo verificando por duplicatas.
2. Costurando os Dados (A Cláusula JOIN
)
O JOIN
é a operação mais importante em um banco de dados relacional. É como damos vida às "relações" entre as tabelas.
- O que faz? Combina colunas de duas ou mais tabelas em um único resultado, com base em uma coluna relacionada entre elas (geralmente a chave primária e a estrangeira).
- Analogia: É o "PROCV (VLOOKUP) do SQL".
- A Dor que Resolve: O problema central da normalização. "Minha tabela
Pedidos
só tem oID_do_Cliente
. Como eu mostro o nome do cliente no meu relatório de vendas?"
A Anatomia de um JOIN
:
SELECT
c.nome_cliente, -- Nome Qualificado: coluna "nome_cliente" da tabela "c"
p.data_pedido
FROM
Clientes AS c
JOIN
Pedidos AS p ON c.ID_Cliente = p.ID_Cliente;
JOIN Pedidos AS p
: "Junte com a tabela Pedidos, que terá o apelido p
." * ON c.ID_Cliente = p.ID_Cliente
: A condição de junção. "A conexão entre as tabelas é onde o ID_Cliente
da tabela de Clientes for igual ao ID_Cliente
da tabela de Pedidos."
3. Os Tipos de Costura (Tipos de JOIN
)
INNER JOIN
(O Casamento Perfeito)
- O que faz? Retorna apenas as linhas onde há uma correspondência em AMBAS as tabelas.
- Analogia: O PROCV padrão. Se um pedido tem um
ID_Cliente
que não existe na tabelaClientes
, essa linha do pedido é ignorada no resultado final.
LEFT JOIN
(O Lado Esquerdo é o que Manda)
- O que faz? Retorna TODAS as linhas da tabela da esquerda (
FROM
) e as linhas correspondentes da tabela da direita (JOIN
). Se não houver correspondência na direita, as colunas da direita virão comoNULL
. - A Dor que Resolve: "Eu quero uma lista de TODOS os meus clientes e, se eles tiverem feito um pedido, quero ver a data do pedido. Se não, ainda quero ver o cliente na lista."
Insight: Existem outros tipos de
JOIN
(RIGHT
,FULL OUTER
), mas no dia a dia, 95% das suas necessidades serão resolvidas comINNER JOIN
eLEFT JOIN
.
O Contexto AWS
- Amazon RDS e Aurora: Os
JOIN
s são o coração das consultas em bancos de dados relacionais. OtimizarJOIN
s com índices nas chaves estrangeiras é a principal tarefa de um DBA para garantir a performance destes serviços. - Amazon Athena: O poder do Athena é que ele também permite executar
JOIN
s complexos entre múltiplos arquivos (ex: umclientes.csv
e umpedidos.json
) no seu Data Lake em S3, tratando-os como se fossem tabelas.
HACK PARA CERTIFICAÇÃO: Para a prova Cloud Practitioner: 1. Você não precisa escrever
JOIN
s, mas precisa entender que eles são a forma como bancos de dados Relacionais (RDS/Aurora) conectam dados entre tabelas. 2. Entenda a diferença conceitual:UNION
empilha dados (verticalmente),JOIN
combina dados (horizontalmente).
Construindo Relatórios Completos: Guia Definitivo de UNION
e JOIN
s
No mundo real dos dados, a informação que você precisa raramente está em um único lugar. Graças a um bom design (Normalização), seus dados estão organizados em tabelas separadas e especializadas: uma para clientes, uma para produtos, uma para vendas.
Mas como juntamos tudo isso? O SQL nos oferece duas ferramentas poderosas, mas com propósitos muito diferentes: UNION
e JOIN
.
Analogia: Pense que seus dados estão em planilhas do Excel. * UNION
é o ato de "empilhar" uma planilha embaixo da outra para criar uma lista única. * JOIN
é o ato de usar o "PROCV (VLOOKUP)" para enriquecer uma planilha com colunas de outra.
1. Empilhando as Planilhas (O Operador UNION
)
- O que faz? Combina os resultados de duas ou mais consultas
SELECT
em um único conjunto de resultados, colocando as linhas umas sobre as outras. - A Dor que Resolve: "Eu tenho uma tabela de
Vendas_2024
e outra deVendas_2025
. Como eu crio um relatório com as vendas de todos os anos juntos?"
As Regras de Ouro do UNION
:
- O número de colunas em todas as consultas
SELECT
deve ser o mesmo. - Os tipos de dados em cada coluna correspondente devem ser compatíveis (ex: texto com texto, número com número).
Exemplo:
SELECT nome_cliente, cidade FROM clientes_sp
UNION ALL
SELECT nome_cliente, cidade FROM clientes_rj;
INSIGHT PODEROSO (
UNION
vs.UNION ALL
): *UNION
: Por padrão, ele remove as linhas duplicadas. É mais lento porque precisa verificar cada linha. *UNION ALL
: Inclui todas as linhas, mesmo que sejam duplicadas. É muito mais rápido e eficiente. Use-o sempre que souber que não há duplicatas ou se elas não importarem para o seu resultado.
2. O PROCV do SQL (A Cláusula JOIN
)
O JOIN
é a operação que dá vida ao modelo relacional. Ele "costura" tabelas diferentes.
- O que faz? Combina colunas de duas ou mais tabelas em um único resultado, com base em uma coluna de ligação entre elas.
- A Dor que Resolve: "Minha tabela
Vendas
tem a colunaID_Cliente
, mas eu preciso mostrar o nome do cliente no meu relatório."
A Anatomia de um JOIN
:
Para evitar ambiguidade quando duas tabelas têm uma coluna com o mesmo nome (como id
), usamos nomes qualificados (tabela.coluna
) e aliases (apelidos para as tabelas).
SELECT
c.nome_cliente, -- A coluna "nome_cliente" da tabela Clientes (apelido "c")
p.data_pedido,
t.nome_produto
FROM
Clientes AS c
JOIN
Pedidos AS p ON c.ID_Cliente = p.ID_Cliente -- Condição de ligação
JOIN
Titulos AS t ON p.ID_Produto = t.ID_Produto; -- Outra condição de ligação* **`JOIN Pedidos AS p`**: "Junte com a tabela Pedidos, que terá o apelido `p`."
Os Tipos de Junção Mais Comuns:
INNER JOIN
(O Encontro Perfeito):- O que faz? Retorna apenas as linhas onde há uma correspondência em AMBAS as tabelas.
- Analogia: "Mostre-me apenas os clientes que fizeram pedidos."
LEFT JOIN
(O Relatório Inclusivo):- O que faz? Retorna TODAS as linhas da tabela da esquerda (a do
FROM
) e os dados correspondentes da tabela da direita. Se não houver correspondência, as colunas da direita virão comoNULL
. - A Dor que Resolve: "Mostre-me TODOS os clientes, e, se eles tiverem feito um pedido, mostre a data do pedido."
- O que faz? Retorna TODAS as linhas da tabela da esquerda (a do
Insight: Existem outros tipos de
JOIN
(RIGHT
,FULL OUTER
), mas no dia a dia, 95% das suas necessidades serão resolvidas comINNER JOIN
eLEFT JOIN
.
O Contexto AWS
- Amazon RDS e Aurora: Os
JOIN
s são o coração das consultas em bancos de dados relacionais. A performance dos seusJOIN
s no RDS ou Aurora depende diretamente de uma boa modelagem de dados e do uso de índices nas suas chaves. - Amazon Athena: O poder do Athena é que ele permite executar
JOIN
s complexos não apenas entre tabelas, mas entre diferentes arquivos e formatos no seu Data Lake em S3. Você pode juntar um arquivoclientes.csv
com umpedidos.parquet
em uma única consulta.
HACK PARA CERTIFICAÇÃO: Para a prova Cloud Practitioner:
- Você não precisa escrever
JOIN
s.- Você precisa entender a diferença conceitual:
UNION
empilha dados (verticalmente).JOIN
combina dados (horizontalmente).- Saiba que os
JOIN
s são a principal característica que
A Arte da Conexão: Guia Prático dos Tipos de JOIN
em SQL
Já sabemos que o JOIN
é o "PROCV" do SQL, a ferramenta para enriquecer uma tabela com dados de outra. Agora, vamos aprender as diferentes "técnicas de costura" que um especialista usa para obter resultados precisos.
Cada tipo de JOIN
responde a uma pergunta de negócio diferente.
1. O Cenário: Nossos Dados da Empresa
Para todos os exemplos, vamos usar estas duas tabelas simples:
Tabela Departamentos
: | id | nome_depto | | :--: | :--- | | 1 | Vendas | | 2 | Engenharia |
Tabela Funcionarios
: | id | nome | id_departamento | id_gerente | | :--: | :--- | :---: | :---: | | 101 | Ana | 1 | 103 | | 102 | Bruno | 2 | 104 | | 103 | Carlos | 1 | NULL | | 104 | Diana | 2 | NULL | | 105 | Eva | NULL | 104 |
2. Os Tipos de Junção na Prática
INNER JOIN
(O Encontro Perfeito)
- Pergunta de Negócio: "Mostre-me uma lista de todos os funcionários que estão em um departamento válido."
- Como Funciona: Retorna apenas as linhas onde há uma correspondência em AMBAS as tabelas. A funcionária "Eva", que não tem
id_departamento
, será excluída do resultado. - O Código:
SELECT f.nome, d.nome_depto FROM Funcionarios AS f INNER JOIN Departamentos AS d ON f.id_departamento = d.id;
- O Resultado: | nome | nome_depto | | :--- | :--- | | Ana | Vendas | | Bruno | Engenharia | | Carlos | Vendas | | Diana | Engenharia |
LEFT OUTER JOIN
(O Relatório Inclusivo)
- Pergunta de Negócio: "Mostre-me uma lista de TODOS os funcionários e, se eles tiverem um departamento, mostre o nome do departamento."
- Como Funciona: Retorna TODAS as linhas da tabela da esquerda (a do
FROM
, neste casoFuncionarios
) e os dados correspondentes da tabela da direita. Se não houver correspondência, a coluna da direita virá comoNULL
. - O Código:
SELECT f.nome, d.nome_depto FROM Funcionarios AS f LEFT JOIN Departamentos AS d ON f.id_departamento = d.id;
- O Resultado: | nome | nome_depto | | :--- | :--- | | Ana | Vendas | | Bruno | Engenharia | | Carlos | Vendas | | Diana | Engenharia | | Eva | NULL |
INSIGHT PODEROSO: O
LEFT JOIN
é a ferramenta perfeita para encontrar "órfãos". Para descobrir quais funcionários não têm um departamento, você usaria umLEFT JOIN
e adicionariaWHERE d.id IS NULL
.
Self JOIN
(O Espelho da Tabela)
- Pergunta de Negócio: "Crie um organograma, mostrando cada funcionário e o nome do seu respectivo gerente."
- Como Funciona: Esta é uma técnica especial onde você junta uma tabela com ela mesma. O segredo é usar aliases de tabela para tratá-la como se fossem duas tabelas diferentes.
- O Código:
SELECT f.nome AS "Nome do Funcionário", g.nome AS "Nome do Gerente" FROM Funcionarios AS f -- A tabela "f" representa o funcionário INNER JOIN Funcionarios AS g -- A tabela "g" representa o gerente ON f.id_gerente = g.id; -- A ligação é onde o "id_gerente" do funcionário é igual ao "id" do gerente
- O Resultado: | Nome do Funcionário | Nome do Gerente | | :--- | :--- | | Ana | Carlos | | Bruno | Diana | | Eva | Diana |
HACK PARA CERTIFICAÇÃO E BOAS PRÁTICAS
- Nomes Qualificados: Como vimos nos exemplos (
f.nome
,d.nome_depto
), usar o alias da tabela antes do nome da coluna (alias.coluna
) não é opcional quando se usaJOIN
s; é uma necessidade para evitar erros de ambiguidade. - Performance:
JOIN
s podem ser operações "caras" para o banco de dados. A performance dos seusJOIN
s em Amazon RDS ou Aurora depende 100% da criação de índices nas colunas usadas na cláusulaON
(as chaves primárias e estrangeiras). - Para a Prova: Entenda a diferença conceitual:
INNER JOIN
retorna apenas os dados que combinam nas duas tabelas.LEFT JOIN
retorna todos os dados da primeira tabela, mais os que combinam da segunda.
Dominar os diferentes tipos de JOIN
é a chave para desbloquear o verdadeiro poder relacional do seu banco de dados e responder a praticamente qualquer pergunta de negócio.