Voltar para a lista de artigos Artigos
7 minutos de leitura

O que é JOIN à ESQUERDA em SQL?

Conheça os detalhes do LEFT JOIN, um dos tipos mais comuns de SQL JOIN.

SQL é principalmente sobre a obtenção de dados de bancos de dados. Muito freqüentemente, será necessário combinar dados de múltiplas tabelas em seu banco de dados. É aí que os JOINs entram em jogo.

O LEFT JOIN é um dos tipos de JOIN que você provavelmente usará com muita freqüência. Neste artigo, explicarei a sintaxe do LEFT JOIN e como ele funciona usando vários exemplos e ilustrações.

JOIN em SQL

Em SQL, você usa JOIN para combinar dados de duas tabelas baseadas em uma coluna com valores correspondentes. Por exemplo, se você tiver uma tabela com informações do cliente (ID do cliente, nome, sobrenome, etc.) e outra tabela com os dados do pedido para um período específico (ID do pedido, data, ID do cliente, ID do produto, etc.) você pode unir essas duas tabelas com base nas colunas que armazenam os números de ID do cliente. Isto lhe dará os dados do pedido e do cliente para cada cliente.

Entretanto, é importante saber que existem diferentes tipos de JOINs em SQL. Você precisará escolher a correta com base nas linhas que deseja manter no conjunto de resultados. Se você estiver interessado em clientes que só fizeram pedidos durante um período de tempo específico, você usará um simples JOIN (também chamado INNER JOIN). Este tipo de SQL JOIN mantém apenas as linhas que estão presentes em ambas as tabelas; em nosso caso, você verá uma linha no conjunto de resultados somente se a identificação do cliente estiver na tabela customers bem como a tabela orders mesa.

Há casos em que você deseja manter linhas da primeira tabela que não têm os registros correspondentes na segunda tabela. Podemos querer ver informações sobre todos os clientes em nosso conjunto de resultados, mesmo que eles não tivessem pedidos em um período de tempo específico. Neste caso, você usará um LEFT JOIN, que combina os dados de duas tabelas para que todas as linhas da (primeira) tabela da esquerda sejam incluídas no resultado.

Este é o tipo de JOIN que vamos focar neste artigo. Se você não tiver certeza de qual tipo de JOIN você precisa em um caso em particular, confira nosso vídeo tutorial em SQL ESQUERDA, DIREITA e FULL JOINs.

JUNTO ESQUERDA Explicado

LEFT JOINO sistema de registro de dados da esquerda, também chamado LEFT OUTER JOIN, retorna todos os registros da esquerda (primeira) tabela e os registros correspondentes da direita (segunda) tabela. Se não houver correspondência para um registro específico, você receberá NULLs nas colunas correspondentes da tabela da direita. Vamos ver como funciona com os clientes e o exemplo de pedidos mencionado acima.

Aqui estão nossas customers e orders tabelas.

customers
idfirst_namelast_name
1SteveBrown
2HelenStewart
3JaneSmith
4JackBond

orders
iddatecustomer_idproduct_idamount
12020-12-20323213.99
22020-12-20312412.45
32020-12-2111889.95
42020-12-224854.60

Para unir essas duas tabelas, mantendo todos os registros do customers você pode usar a seguinte consulta SQL:

SELECT *
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
ORDER BY customers.id;

Vamos analisar a sintaxe de LEFT JOIN:

  • SELECT - Comece listando as colunas (de ambas as tabelas) que você quer ver no conjunto de resultados (aqui selecionamos todas as colunas usando *);
  • FROM - Coloque o nome da tabela da esquerda, aquela onde você quer manter todos os registros (ou seja customers);
  • LEFT JOIN - Escreva o nome da segunda (direita) tabela (i.e.) orders);
  • ON - Use esta palavra-chave para indicar as colunas que serão usadas para unir as tabelas, ou seja, aquelas com os valores correspondentes. (Aqui, é id de customers e customer_id de orders).

Nesta consulta, também usamos ORDER BY para solicitar a saída por identificação do cliente, mas isto é opcional.

Depois de executar esta consulta, você receberá a seguinte tabela.

customersorders
idfirst_namelast_nameiddatecustomer_idproduct_idamount
1SteveBrown12020-12-2111889.95
2HelenStewart[NULL][NULL][NULL][NULL][NULL]
3JaneSmith32020-12-20323213.99
3JaneSmith32020-12-20312412.45
4JackBond42020-12-224854.60

Dê uma olhada na animação:

Gif mostrando como funciona o LEFT JOIN

Como funciona o LEFT JOIN?

Primeiro de tudo, o banco de dados procura em cada linha da tabela da esquerda e procura uma correspondência na tabela da direita com base nas colunas relacionadas. Se houver uma correspondência, ele adiciona dados da tabela da direita à linha correspondente da tabela da esquerda. Se houver várias correspondências (como no nosso caso com o cliente nº 3), ele duplica a linha da tabela da esquerda para incluir todos os registros da tabela da direita. Se não houver correspondência, ele ainda mantém a linha da tabela da esquerda e coloca NULL nas colunas correspondentes da tabela da direita (cliente nº 2 em nosso exemplo).

Simples, não é assim? Você pode praticar o LEFT JOINs neste curso interativo Cláusulas JOIN em SQL . E agora vamos analisar mais alguns exemplos de trabalho com LEFT JOINs.

SQL LEFT JOINs em uso

Exemplo com funcionários

Temos uma tabela com employees e quer corresponder com a tabela que lista todos os bônus pagos em janeiro (jan_bonuses).

employees
idfirst_namelast_name
1JoeBiden
2BernieSanders
3PeterButtigieg
4ElizabethWarren
5MichaelBloomberg

jan_bonuses
idemployee_idamount
10113460.00
10222340.00
10341800.00

Queremos nos juntar a estas mesas para ver quem recebeu bônus em janeiro. Nosso resultado deve incluir todos os funcionários, não importa se eles receberam ou não um bônus. Assim, vamos utilizar um LEFT JOIN:

SELECT *
FROM employees
LEFT JOIN jan_bonuses
ON employees.id = jan_bonuses.employee_id;
employeesjan_bonuses
idfirst_namelast_nameidemployee_idamount
1JoeBiden10113460.00
2BernieSanders10222340.00
3PeterButtigieg[NULL][NULL][NULL]
4ElizabethWarren10341800.00
5MichaelBloomberg[NULL][NULL][NULL]

Como esperado, o resultado inclui todos os funcionários. Se um funcionário não for encontrado na tabela com informações de bônus, as colunas correspondentes da segunda tabela são preenchidas com valores NULL.

Interessado em saber como funcionam outras OUTER JOINs? Leia este guia ilustrado do SQL OUTER JOIN para saber como o RIGHT OUTER JOIN e o FULL OUTER JOIN diferem do LEFT OUTER JOIN.

Exemplo com países

Em nosso exemplo final, vamos juntar duas tabelas usando LEFT JOIN, mas incluiremos apenas colunas selecionadas no resultado final.

Temos uma lista de países com algumas informações básicas e queremos complementá-la com os dados do PIB de 2019, onde tais dados estiverem disponíveis.

countries
idnamepopulationcurrencyarea
201United States330,770,244USD9,525,067
202China1,405,631,120CNY9,596,961
203Japan125,770,000JPY377,975
204Germany83,122,889EUR357,114
205India1,370,521,240INR3,287,263

gdp_2019
rankcountry_idgdp_nominal_MUSD
120121,427,700
220214,342,903
32035,081,770

Em nossa produção, não precisamos de todas as informações sobre cada país - apenas a identificação do país, nome, população e PIB nominal para 2019. Aqui está a consulta que vamos usar:

SELECT id, name, population, gdp_nominal_MUSD
FROM countries
LEFT JOIN gdp_2019
ON countries.id = gdp_2019.country_id;
countriesgdp_2019
idnamepopulationgdp_nominal_MUSD
201United States330,770,24421,427,700
202China1,405,631,12014,342,903
203Japan125,770,0005,081,770
204Germany83,122,889[NULL]
205India1,370,521,240[NULL]

A tabela inclui três colunas da countries tabela e uma coluna da gdp_2019 mesa. Como esperado, a LEFT JOIN mantém todos os registros da primeira tabela e entradas NULL valores para os registros inigualáveis.

Note que nesta declaração SELECT, simplesmente listamos os nomes das colunas que queremos ver no resultado. Isto só funciona quando não temos colunas com o mesmo nome em ambas as tabelas. A abordagem mais segura é especificar a tabela para cada coluna que solicitamos, ou seja, countries.id, countries.name, countries.population, gdp_2019.gdp_nominal_MUSD.

Se você precisar unir mais de duas tabelas à esquerda, leia meu guia à esquerda - unindo várias tabelas em SQL.

Hora de Praticar a JUNTA ESQUERDA!

Você aprendeu a sintaxe de LEFT JOIN e sabe quando e como usar este tipo de SQL JOIN. Você está pronto para o próximo passo - escrever suas próprias consultas SQL com o LEFT JOINs.

Eu recomendo começar com nossa Cláusulas JOIN em SQL curso, que inclui 93 exercícios interativos abrangendo INNER JOIN, OUTER JOINs, non-equi JOINs, e muito mais. Após terminar este curso, você saberá como escolher o tipo correto de JOIN, como unir várias mesas, como unir uma mesa consigo mesmo e como unir mesas usando outros operadores condicionais além da igualdade.

Você se sente inseguro sobre a prática do Cláusulas JOIN em SQL online? Confira este artigo que apresenta as melhores abordagens para a prática de diferentes tipos de Cláusulas JOIN em SQL.

Obrigado por ler, e feliz aprendizado!