Unir tabelas é um dos conceitos mais importantes do SQL Server, permitindo combinar dados de várias tabelas para criar relatórios e análises relevantes. Seja para montar relatórios complexos ou fazer análise de dados, entender como os joins funcionam é essencial para qualquer desenvolvedor SQL.
Neste guia completo, vamos percorrer cada tipo de join no SQL Server com exemplos práticos, explicações claras e cenários do mundo real.
🔖 Referência rápida: Precisa de uma consulta rápida? Confira nosso Guia rápido de SQL JOIN com todos os tipos de JOIN, diagramas visuais e exemplos de código em um só lugar.
Entendendo os joins no SQL Server
Joins no SQL Server são operações que combinam linhas de duas ou mais tabelas com base em uma coluna relacionada entre elas. Os tipos de join mais comuns são:
- INNER JOIN: retorna apenas os registros correspondentes de ambas as tabelas
- LEFT JOIN: retorna todos os registros da tabela da esquerda, mais os registros correspondentes da tabela da direita
- RIGHT JOIN: retorna todos os registros da tabela da direita, mais os registros correspondentes da tabela da esquerda
- FULL OUTER JOIN: retorna todos os registros quando há correspondência em qualquer uma das tabelas
Preparando os dados de exemplo
Nos exemplos, vamos usar duas tabelas simples que representam um cenário comum de negócio:
Tabela Orders:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
Product NVARCHAR(50),
OrderDate DATE
);
INSERT INTO Orders VALUES
(1, 1, 'Laptop', '2024-01-15'),
(2, 2, 'Mouse', '2024-01-16'),
(3, 3, 'Keyboard', '2024-01-17');
| OrderID | CustomerID | Product | OrderDate |
|---|---|---|---|
| 1 | 1 | Laptop | 2024-01-15 |
| 2 | 2 | Mouse | 2024-01-16 |
| 3 | 3 | Keyboard | 2024-01-17 |
Tabela Customers:
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name NVARCHAR(50),
City NVARCHAR(50)
);
INSERT INTO Customers VALUES
(1, 'John Doe', 'New York'),
(2, 'Jane Smith', 'Los Angeles'),
(4, 'Alex Johnson', 'Chicago');
| CustomerID | Name | City |
|---|---|---|
| 1 | John Doe | New York |
| 2 | Jane Smith | Los Angeles |
| 4 | Alex Johnson | Chicago |
INNER JOIN
Um INNER JOIN retorna apenas as linhas que têm um valor correspondente em ambas as tabelas. É o tipo de join mais usado e é perfeito quando você quer ver apenas os registros que existem nas duas tabelas.
Quando usar INNER JOIN
- Quando você precisa de dados que existem em ambas as tabelas
- Para relatórios que mostram relacionamentos completos
- Quando você quer excluir registros incompletos
Exemplo de consulta SQL
SELECT
o.OrderID,
c.Name,
c.City,
o.Product,
o.OrderDate
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;
Resultado
| OrderID | Name | City | Product | OrderDate |
|---|---|---|---|---|
| 1 | John Doe | New York | Laptop | 2024-01-15 |
| 2 | Jane Smith | Los Angeles | Mouse | 2024-01-16 |
Pontos principais:
- Apenas 2 linhas retornadas (OrderID 3 excluído porque CustomerID 3 não existe na tabela Customers)
- Apenas clientes que fizeram pedidos aparecem no resultado
- A condição de join (
o.CustomerID = c.CustomerID) determina quais linhas correspondem
LEFT JOIN
Um LEFT JOIN (também chamado de LEFT OUTER JOIN) retorna todas as linhas da tabela da esquerda, mais as linhas correspondentes da tabela da direita. Quando não há correspondência, aparecem valores NULL nas colunas da tabela da direita.
Quando usar LEFT JOIN
- Quando você precisa de todos os registros da tabela principal (tabela da esquerda)
- Para relatórios que mostram lacunas nos dados ou relacionamentos ausentes
- Quando você quer encontrar registros sem correspondência
Exemplo de consulta SQL
SELECT
o.OrderID,
c.Name,
c.City,
o.Product,
o.OrderDate
FROM Orders o
LEFT JOIN Customers c ON o.CustomerID = c.CustomerID;
Resultado
| OrderID | Name | City | Product | OrderDate |
|---|---|---|---|---|
| 1 | John Doe | New York | Laptop | 2024-01-15 |
| 2 | Jane Smith | Los Angeles | Mouse | 2024-01-16 |
| 3 | NULL | NULL | Keyboard | 2024-01-17 |
Pontos principais:
- Todos os 3 pedidos aparecem no resultado (preserva todos os dados da tabela da esquerda)
- OrderID 3 mostra NULL nas informações do cliente porque CustomerID 3 não existe na tabela Customers
- Útil para identificar pedidos sem dados de cliente válidos
RIGHT JOIN
Um RIGHT JOIN (também chamado de RIGHT OUTER JOIN) retorna todas as linhas da tabela da direita, mais as linhas correspondentes da tabela da esquerda. Quando não há correspondência, aparecem valores NULL nas colunas da tabela da esquerda.
Quando usar RIGHT JOIN
- Quando você precisa de todos os registros da tabela da direita
- Menos comum que o LEFT JOIN (geralmente dá para reescrever como LEFT JOIN)
- Útil quando os dados “principais” estão na segunda tabela
Exemplo de consulta SQL
SELECT
o.OrderID,
c.Name,
c.City,
o.Product,
o.OrderDate
FROM Orders o
RIGHT JOIN Customers c ON o.CustomerID = c.CustomerID;
Resultado
| OrderID | Name | City | Product | OrderDate |
|---|---|---|---|---|
| 1 | John Doe | New York | Laptop | 2024-01-15 |
| 2 | Jane Smith | Los Angeles | Mouse | 2024-01-16 |
| NULL | Alex Johnson | Chicago | NULL | NULL |
Pontos principais:
- Todos os 3 clientes aparecem no resultado (preserva todos os dados da tabela da direita)
- Alex Johnson mostra NULL nas informações de pedido porque ainda não fez nenhum pedido
- Útil para identificar clientes que ainda não fizeram compras
FULL OUTER JOIN
Um FULL OUTER JOIN (ou apenas FULL JOIN) retorna todas as linhas quando há correspondência em qualquer uma das tabelas. Ele combina os resultados do LEFT e do RIGHT JOIN, mostrando valores NULL onde não há correspondência em algum dos lados.
Quando usar FULL OUTER JOIN
- Quando você precisa de todos os registros de ambas as tabelas
- Para análises de dados abrangentes
- Para identificar todos os relacionamentos e lacunas entre tabelas
Exemplo de consulta SQL
SELECT
o.OrderID,
c.Name,
c.City,
o.Product,
o.OrderDate
FROM Orders o
FULL OUTER JOIN Customers c ON o.CustomerID = c.CustomerID;
Resultado
| OrderID | Name | City | Product | OrderDate |
|---|---|---|---|---|
| 1 | John Doe | New York | Laptop | 2024-01-15 |
| 2 | Jane Smith | Los Angeles | Mouse | 2024-01-16 |
| 3 | NULL | NULL | Keyboard | 2024-01-17 |
| NULL | Alex Johnson | Chicago | NULL | NULL |
Pontos principais:
- Todas as 4 linhas possíveis aparecem no resultado
- Mostra tanto pedidos órfãos (OrderID 3) quanto clientes sem pedidos (Alex Johnson)
- Combina a visão abrangente do LEFT e do RIGHT JOIN
- A visão mais completa do relacionamento entre as tabelas
Principais lições
Entender os joins no SQL Server é essencial para consultar bancos de dados com eficiência. Aqui vai uma referência rápida:
| Tipo de join | Retorna | Caso de uso |
|---|---|---|
| INNER JOIN | Apenas registros correspondentes | O mais comum; quando você precisa de relacionamentos completos |
| LEFT JOIN | Toda a esquerda + correspondentes da direita | Quando a tabela da esquerda é a principal; encontrar dados ausentes na direita |
| RIGHT JOIN | Toda a direita + correspondentes da esquerda | Menos comum; quando a tabela da direita é a principal |
| FULL OUTER JOIN | Todos os registros de ambas | Análise completa; encontrar todos os relacionamentos e lacunas |
Boas práticas
-
Use aliases de tabela (
opara Orders,cpara Customers) para deixar as consultas mais limpas - Comece com INNER JOIN se estiver em dúvida e ajuste conforme os requisitos
- Prefira LEFT JOIN a RIGHT JOIN para melhor legibilidade
-
Sempre especifique a condição de join com a cláusula
ON - Pense no desempenho - joins em colunas indexadas são mais rápidos
Dicas para praticar
Para dominar os joins no SQL Server:
- Comece com conjuntos de dados pequenos como os exemplos acima
- Desenhe diagramas de Venn para visualizar o que cada join retorna
- Experimente diferentes estruturas de tabelas e relacionamentos
- Use o SQL Server Management Studio ou o Beekeeper Studio para praticar
- Teste casos extremos como valores NULL e relacionamentos ausentes
Lembre-se: joins são fundamentais em bancos de dados relacionais. Depois de dominá-los, você conseguirá criar consultas poderosas que extraem insights relevantes dos seus dados.
Beekeeper Studio é um cliente de banco de dados gratuito e open source
A melhor ferramenta de consultas e edição de SQL que já usei. Tem tudo o que preciso para gerenciar meu banco de dados. - ⭐⭐⭐⭐⭐ Mit
O Beekeeper Studio é rápido, intuitivo e fácil de usar. Ele suporta vários bancos de dados e funciona muito bem no Windows, Mac e Linux.
O que os usuários dizem sobre o Beekeeper Studio
"O Beekeeper Studio substituiu completamente meu antigo fluxo de trabalho com SQL. É rápido, intuitivo e torna o trabalho com banco de dados agradável de novo."
"Já testei muitas GUIs de banco de dados, mas o Beekeeper tem o equilíbrio perfeito entre recursos e simplicidade. Simplesmente funciona."