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.
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.