Curso
Neste tutorial, explicarei a diferença entre o SQL INNER JOIN
e o OUTER JOIN
e usarei exemplos. Depois de resolvermos esse problema, talvez você queira fazer nosso curso Joining Data in SQL, que aborda outras junções interessantes, como SELF JOIN
e CROSS JOIN
, bem como ideias mais amplas, como a teoria dos conjuntos.
Resposta rápida
INNER JOIN
retorna apenas as linhas correspondentes entre tabelas com base em uma coluna comum, excluindo as linhas não correspondentes. Por exemplo, a consulta abaixo mostra pedidos com detalhes do cliente somente quando há uma correspondência.
-- Inner Join: Returns only matching rows from both tables
SELECT o.OrderID, c.CustomerName
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;
OUTER JOIN
inclui linhas correspondentes, bem como linhas não correspondentes de uma ou ambas as tabelas. A consulta abaixo retorna todos os clientes, inclusive aqueles sem pedidos.
-- Left Outer Join: Returns all rows from Customers and matching rows from Orders
SELECT c.CustomerName, o.OrderID
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
Uma análise detalhada do SQL INNER JOIN e OUTER JOIN
Vamos agora dar uma olhada mais de perto no SQL INNER JOIN
e OUTER JOIN
, um de cada vez. Ao analisarmos cada uma delas, considere as duas tabelas a seguir:
Exemplo de tabela de funcionários. Imagem do autor.
Exemplo de tabela de departamentos. Imagem do autor.
Como funciona o INNER JOIN
Um INNER JOIN
recupera apenas as linhas com uma correspondência em ambas as tabelas com base na condição especificada.
A consulta a seguir seleciona employee_id
, demployee_name
, department_name
e salary
e, em seguida, retorna as linhas em que department_id
existe.
-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;
Exemplo de tabela mesclada usando SQL INNER JOIN. Imagem do autor.
Como funciona o OUTER JOIN
O site OUTER JOIN
inclui linhas não correspondentes de uma ou ambas as tabelas, dependendo do tipo de OUTER JOIN
usado.
UNIÃO EXTERNA ESQUERDA (UNIÃO ESQUERDA)
O LEFT OUTER JOIN
retorna todos os registros da tabela da esquerda e os registros correspondentes da tabela da direita. Se não houver correspondência, os valores de NULL
serão retornados para as colunas da tabela correta.
O exemplo a seguir recupera todos os registros da tabela employees
, mesmo quando há registros não correspondentes. O endereço department_name
ausente para os funcionários é retornado como NULL
.
-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
Exemplo de tabela unida usando a união externa esquerda do SQL. Imagem do autor.
LEFT JOIN e LEFT OUTER JOIN são usados de forma intercambiável no SQL, pois ambas as consultas buscam todas as linhas da tabela da esquerda e as linhas correspondentes da tabela da direita.
JUNÇÃO EXTERNA DIREITA (JUNÇÃO DIREITA)
O RIGHT OUTER JOIN
retorna todos os registros da tabela da direita e os registros correspondentes da tabela da esquerda. As linhas não correspondentes na tabela da esquerda retornam NULL
.
A consulta abaixo retorna todos os registros da tabela departments
, mesmo quando não há funcionários correspondentes.
-- Get all departments, even those without employees
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;
Exemplo de união de contos usando a união externa direita do SQL. Imagem do autor.
JUNÇÃO EXTERNA COMPLETA
O site FULL OUTER JOIN
combina os resultados das uniões externas esquerda e direita. Ele retorna todos os registros de ambas as tabelas, preenchendo NULL
onde não há correspondências.
A consulta abaixo retorna todos os registros da tabela employees
e departments
, mesmo com linhas não correspondentes.
-- Combine all employees and departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
FULL JOIN departments
ON employees.department_id = departments.department_id;
Exemplo de tabela unida usando SQL Full outer join. Imagem do autor.
INNER JOIN vs. OUTER JOIN: Principais diferenças
INNER JOIN
e OUTER JOIN
diferem fundamentalmente na forma como lidam com linhas não correspondentes ao mesclar tabelas. Entender essas diferenças é importante para que você escolha o tipo de união correto em suas consultas ao banco de dados. Vamos comparar essas diferenças.
O que INNER JOIN retorna
INNER JOIN
retorna apenas as linhas com valores correspondentes em ambas as tabelas. Esse tipo de união é usado quando você precisa de dados em ambos os conjuntos de dados.
A consulta a seguir recupera registros de employees
com linhas correspondentes da tabela departments
.
-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;
Exemplo de tabela unida usando SQL INNER JOIN. Imagem do autor.
O que OUTER JOIN retorna
OUTER JOIN
inclui linhas não correspondentes de uma ou ambas as tabelas, dependendo do tipo de OUTER JOIN
. Por exemplo, o LEFT OUTER JOIN
retorna todas as linhas da tabela da esquerda e as linhas correspondentes da tabela da direita. Se você não encontrar linhas correspondentes na tabela correta, terá NULLs.
A consulta a seguir recupera registros de funcionários, mesmo aqueles sem um departamento.
-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
Exemplo de dados recuperados usando SQL LEFT OUTER JOIN. Imagem do autor.
Quando usar SQL INNER JOIN e OUTER JOIN
INNER JOIN
e OUTER JOIN
também diferem em seus casos de uso prático na recuperação de dados.
Quando usar INNER JOIN
INNER JOIN
é mais eficaz quando você precisa apenas dos dados de interseção de duas tabelas. Por exemplo, você pode usar o site INNER JOIN
ao analisar dados de vendas para encontrar produtos que foram vendidos, como quando as tabelas de produtos e vendas têm entradas correspondentes.
Quando usar OUTER JOIN
OUTER JOIN
é apropriado quando você precisa retornar um conjunto de dados completo, incluindo linhas sem correspondência. Por exemplo, ao gerar um relatório para mostrar todos os funcionários, inclusive aqueles sem atribuição de departamento, ou todos os departamentos, inclusive aqueles sem funcionários.
Conclusão
Entender a diferença entre INNER JOIN
e OUTER JOIN
é importante para que você possa escrever consultas eficientes. O aprendizado dessas técnicas também ajuda a aprimorar a otimização de consultas para acelerar a recuperação de dados. Incentivo você a continuar praticando para aprender mais habilidades no gerenciamento de banco de dados.
Recomendo que você experimente o nosso programa de carreira Associate Data Analyst in SQL para se tornar um bom analista de dados. Nosso curso Reporting in SQL também ajudará você a se tornar proficiente na criação de relatórios e painéis complexos para a apresentação eficaz de dados. Se você estiver se preparando para uma entrevista que inclua a demonstração de suas habilidades em SQL, recomendo que consulte nosso blog, 20 Top SQL Joins Interview Questions, para ajudá-lo a se preparar para a entrevista.
Obtenha uma das melhores certificações em SQL
Perguntas frequentes sobre SQL INNER JOIN e OUTER JOIN
Qual é a diferença entre INNER JOIN e OUTER JOIN no SQL?
INNER JOIN retorna apenas as linhas correspondentes de ambas as tabelas, enquanto OUTER JOIN inclui as linhas não correspondentes, com NULLs preenchendo as lacunas quando nenhum dado correspondente é encontrado.
Quando devo usar um INNER JOIN no SQL?
Use um INNER JION quando você precisar recuperar apenas as linhas com valores correspondentes em ambas as tabelas.
Quais são os tipos de OUTER JOIN no SQL?
Os tipos de OUTER JOIN são LEFT OUTER JOIN, RIGHT OUTER JOIN e FULL OUTER JOIN.
Como funciona um LEFT OUTER JOIN no SQL?
Uma união externa esquerda retorna todas as linhas da tabela esquerda, as linhas correspondentes da tabela direita e as linhas não correspondentes da esquerda.
O que é um FULL OUTER JOIN no SQL?
Um FULL OUTER JOIN retorna todas as linhas de ambas as tabelas, incluindo as linhas não correspondentes de cada uma delas.