SQL INNER JOIN e LEFT JOIN: Explicação detalhada das diferenças e quando usar

O INNER JOIN e o LEFT JOIN em SQL são operações de junção frequentemente usadas em consultas de banco de dados. Essenciais para integrar dados e personalizar resultados de pesquisa, essas operações têm características distintas e são usadas em diferentes situações. Este artigo explica em detalhes as diferenças entre INNER JOIN e LEFT JOIN, além de fornecer exemplos práticos e cenários adequados para seu uso.

Índice

O que é INNER JOIN

INNER JOIN é uma operação SQL usada para combinar duas ou mais tabelas. Esta operação inclui apenas os registros que atendem à condição de junção no conjunto de resultados. Por exemplo, se houver duas tabelas, o INNER JOIN retornará apenas as linhas que têm chaves comuns em ambas as tabelas. Isso permite extrair apenas os dados relacionados. O INNER JOIN é muito útil para esclarecer a relação exata entre tabelas e excluir dados desnecessários.

Exemplo de uso do INNER JOIN

A seguir, mostramos como usar o INNER JOIN com um exemplo de código SQL. Vamos usar as tabelas customers para gerenciar informações de clientes e orders para gerenciar informações de pedidos.

Exemplo: Junção de clientes e pedidos

A seguinte consulta SQL combina clientes com seus pedidos, usando o ID do cliente (customer_id) como chave comum.

SELECT 
    customers.customer_id,
    customers.customer_name,
    orders.order_id,
    orders.order_date
FROM 
    customers
INNER JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id;

Esta consulta combina registros nas tabelas customers e orders onde a coluna customer_id coincide e retorna um conjunto de resultados que inclui ID do cliente, nome do cliente, ID do pedido e data do pedido. Com o INNER JOIN, clientes sem pedidos ou pedidos sem clientes não serão incluídos no conjunto de resultados.

O que é LEFT JOIN

O LEFT JOIN é uma operação SQL que combina duas ou mais tabelas, incluindo todos os registros da tabela à esquerda e adicionando os registros da tabela à direita que atendem à condição de junção. Quando não há correspondência na tabela à direita, o valor NULL é retornado. O LEFT JOIN é usado principalmente quando você deseja manter todos os dados da tabela à esquerda, adicionando informações adicionais da tabela à direita.

Exemplo de uso do LEFT JOIN

Veja a seguir um exemplo de uso do LEFT JOIN com SQL, usando novamente as tabelas customers e orders.

Exemplo: Junção de clientes e pedidos

A consulta SQL a seguir combina todos os clientes com seus pedidos, usando o ID do cliente (customer_id) como chave comum.

SELECT 
    customers.customer_id,
    customers.customer_name,
    orders.order_id,
    orders.order_date
FROM 
    customers
LEFT JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id;

Esta consulta retorna todos os registros da tabela customers e combina com registros da tabela orders onde a coluna customer_id coincide, retornando ID do cliente, nome do cliente, ID do pedido e data do pedido. Com o LEFT JOIN, clientes sem pedidos ainda serão incluídos no conjunto de resultados, com informações do pedido retornando como NULL.

Diferenças entre INNER JOIN e LEFT JOIN

Para entender as diferenças entre INNER JOIN e LEFT JOIN, vamos ilustrar o comportamento de cada um.

Comportamento do INNER JOIN

O INNER JOIN retorna apenas os registros que são comuns em ambas as tabelas. Por exemplo, ao combinar as tabelas customers e orders, apenas os registros que compartilham o mesmo customer_id em ambas as tabelas serão incluídos no conjunto de resultados.

Tabela customers:
+-------------+----------------+
| customer_id | customer_name  |
+-------------+----------------+
| 1           | Alice          |
| 2           | Bob            |
| 3           | Charlie        |
+-------------+----------------+

Tabela orders:
+-------------+----------+------------+
| order_id    | customer_id | order_date |
+-------------+----------+------------+
| 101         | 1        | 2023-01-10 |
| 102         | 3        | 2023-01-15 |
+-------------+----------+------------+

Resultado do INNER JOIN:
+-------------+----------------+----------+------------+
| customer_id | customer_name  | order_id | order_date |
+-------------+----------------+----------+------------+
| 1           | Alice          | 101      | 2023-01-10 |
| 3           | Charlie        | 102      | 2023-01-15 |
+-------------+----------------+----------+------------+

Comportamento do LEFT JOIN

O LEFT JOIN retorna todos os registros da tabela à esquerda e adiciona registros da tabela à direita se houver correspondência. Se não houver correspondência, os valores da tabela à direita serão NULL.

Resultado do LEFT JOIN:
+-------------+----------------+----------+------------+
| customer_id | customer_name  | order_id | order_date |
+-------------+----------------+----------+------------+
| 1           | Alice          | 101      | 2023-01-10 |
| 2           | Bob            | NULL     | NULL       |
| 3           | Charlie        | 102      | 2023-01-15 |
+-------------+----------------+----------+------------+

Assim, enquanto o INNER JOIN retorna apenas registros comuns às duas tabelas, o LEFT JOIN retorna todos os registros da tabela à esquerda e, se não houver correspondência, valores NULL para a tabela à direita.

Quando usar INNER JOIN e LEFT JOIN

A escolha entre INNER JOIN e LEFT JOIN depende dos dados que você deseja obter e do seu objetivo. Vamos analisar em quais cenários cada um é mais apropriado.

Cenários de uso do INNER JOIN

O INNER JOIN é adequado quando você precisa de dados que estejam presentes em ambas as tabelas. É usado nas seguintes situações:

Obter dados correspondentes de clientes e pedidos

Quando você deseja obter informações de pedidos feitos por clientes, o INNER JOIN é útil. Por exemplo, para obter informações de clientes que compraram um produto específico.

SELECT 
    customers.customer_name,
    orders.order_id
FROM 
    customers
INNER JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id
WHERE 
    orders.product_id = 123;

Cenários de uso do LEFT JOIN

O LEFT JOIN é adequado quando você deseja manter todos os dados da tabela à esquerda e adicionar informações da tabela à direita. Ele é útil nas seguintes situações:

Verificar todos os clientes e seus pedidos

Quando você quer exibir uma lista completa de clientes e verificar se eles fizeram algum pedido, o LEFT JOIN é apropriado. Por exemplo, para listar todos os clientes e seus respectivos pedidos, se houver.

SELECT 
    customers.customer_name,
    orders.order_id
FROM 
    customers
LEFT JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id;

Encontrar clientes sem pedidos

O LEFT JOIN também pode ser usado para identificar clientes que não fizeram pedidos. Usando uma verificação de NULL, você pode localizar esses clientes.

SELECT 
    customers.customer_name
FROM 
    customers
LEFT JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id
WHERE 
    orders.order_id IS NULL;

Assim, o INNER JOIN é ideal para extrair dados comuns, enquanto o LEFT JOIN mantém a integridade da tabela à esquerda ao adicionar dados adicionais.

Conclusão

O INNER JOIN e o LEFT JOIN são operações SQL essenciais usadas para finalidades distintas. O INNER JOIN extrai apenas os dados comuns a ambas as tabelas, filtrando dados relacionados de forma rigorosa. O LEFT JOIN, por outro lado, mantém todos os dados da tabela à esquerda e adiciona dados da tabela à direita, se houver correspondência, retornando NULL onde não houver. Compreender as características de cada operação permite criar consultas de banco de dados mais eficientes e eficazes.

Índice