JOIN no SQL: o que é, para que serve e tipos de JOINs e como fazer

Danielle Oliveira
Danielle Oliveira

Compartilhe

Avalie este artigo

No SQL (Structured Query Language) existem várias formas de realizar consultas no banco de dados utilizando desde queries simples a queries mais complexas. 

Um exemplo comum é a necessidade de realizar consultas em várias tabelas ao mesmo tempo. No banco de dados, existem várias tabelas diferentes onde os dados são armazenados e, muitas vezes, é necessário juntar os dados que estão em várias tabelas para se obter alguma informação muito importante. 

Diagrama mostrando tipos de JOIN em SQL: INNER, LEFT, RIGHT, FULL e CROSS, todos apontando para “JOIN”. 

Com esse intuito, foi criada a cláusula JOIN ou junção que é utilizada para realizar a combinação de colunas de uma ou mais tabelas em um única query a partir de uma coluna em comum entre as tabelas. 

Existem cinco tipos de JOIN no SQL, cada um permitindo diferentes formas de combinar dados. Os principais tipos de JOINs são: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, e CROSS JOIN. Conhecer os tipos de joins é essencial para extrair informações completas do banco de dados. 

Neste artigo, vamos abordar como cada um deles funciona. 

INNER JOIN 

O INNER JOIN é utilizado quando queremos retornar os registros que tenham correspondência nas duas tabelas presentes na junção. Observe que, na imagem a seguir, é utilizado o INNER JOIN. Nesse caso apenas os registros que estão na interseção do conjunto A com o conjunto B são retornados: 

Duas circunferências representando um conjunto A e um conjunto B. A interseção entre os dois conjuntos está pintada de azul 

Trazendo para o SQL, vamos utilizar o seguinte exemplo: em um banco de dados de uma empresa, existem duas tabelas que se relacionam entre si, sendo elas a tabela de funcionários e a tabela de cargos. A primeira possui os campos código do funcionário, nome e código do cargo

Tabela de funcionários com três colunas. Na coluna código dos funcionários temos os números 1, 2, 3 e 4. Na coluna nome temos os nomes José, Daniella, Ana e Carlos. Na coluna código cargo temos os números 3, 1, 2 e (null) 

E a segunda possui os campos código do cargo e descrição dos cargos

Tabela de cargos com duas colunas. Na coluna código do cargo temos os números 1, 2, 3 e 4. Na coluna descrição temos vendedor, caixa, gerente e entregador 

SELECT com INNER JOIN: 

SELECT <select_list> FROM Tabela A INNER JOIN Tabela B ON A.Key = B.Key 
SELECT A.nome, A.cod_cargo, B.descrição FROM funcionario A INNER JOIN cargo B  ON A.cod_cargo = B.cod_cargo;
  • Informando no SELECT os campos que serão retornados no resultado: 
SELECT A.nome, A.cod_cargo, B.descrição 

Realizando a junção entre as tabelas: 

FROM funcionario A INNER JOIN cargo B 

Condição que os registros precisam corresponder para serem retornados: 

ON A.cod_cargo = B.cod_cargo; 

Resultado 

Tabela com 3 colunas, sendo resultante da query executada com INNER JOIN. Na coluna nome temos os nomes José, Daniella e Ana. Na coluna código do cargo temos os números 3, 1 e 2. Na coluna descrição temos gerente, vendedor e caixa 

Foram retornadas todas as pessoas funcionárias, com exceção do funcionário Carlos que não tem um cargo associado a ele e do cargo entregador, pois não está associado a nenhum funcionário. 

Banner promocional da Alura com tema “May the 4th”, destacando até 44% de desconto em cursos de tecnologia e programação. A oferta inclui um gift card de até 150 reais para plataformas como Xbox, PlayStation, Uber e Netflix, incentivando a começar a estudar e evoluir na carreira tech com desconto.

LEFT JOIN 

O LEFT JOIN é utilizado quando queremos retornar apenas os registros da tabela da esquerda (tabela que está antes da cláusula LEFT JOIN) e os registros que tenham correspondência na tabela da direita. 

Observe que, na imagem a seguir, é utilizado o LEFT JOIN. Nesse caso, todos os registros do conjunto A e apenas os registros que estão na interseção do conjunto A com o conjunto B seriam retornados: 

Duas circunferências representando um conjunto A e um conjunto B, onde o conjunto A e a interseção entre os dois conjuntos está pintada de azul 

SELECT com LEFT JOIN: 

SELECT <select_list> FROM Tabela A LEFT JOIN Tabela B ON A.Key = B.Key 
SELECT A.nome, A.cod_cargo, B.descrição FROM funcionario A LEFT JOIN cargo B ON A.cod_cargo = B.cod_cargo;

Resultado 

Tabela com 3 colunas, sendo resultante da query executada com LEFT JOIN. Na coluna nome temos os nomes Daniella, Ana, José e Carlos. Na coluna código do cargo temos os números 1, 2, 3 e null. Na coluna descrição temos vendedor, caixa, gerente e null 

Foram retornadas todas as pessoas funcionárias, tanto as que possuem um cargo associado quanto as que não possuem. 

RIGHT JOIN 

"O `RIGHT JOIN` é utilizado quando queremos retornar todos os registros da tabela à direita (a que está após a cláusula RIGHT JOIN), incluindo aqueles que não possuem correspondência na tabela à esquerda."

Observe que, na imagem a seguir, é utilizado o RIGHT JOIN. Nesse caso, todos os registros do conjunto B e apenas os registros que estão na interseção do conjunto A com o conjunto B seriam retornados: 

Duas circunferências representando um conjunto A e um conjunto B, onde o conjunto B e a interseção entre os dois conjuntos está pintada de azul 

SELECT com RIGHT JOIN: 

SELECT <select_list> FROM Tabela A RIGHT JOIN Tabela B ON A.Key = B.Key 
SELECT A.nome,A.cod_cargo,B.descrição FROM funcionario A RIGHT JOIN cargo B  ON A.cod_cargo = B.cod_cargo;

Resultado 

Tabela com 3 colunas, sendo resultante da query executada com RIGHT JOIN. Na coluna nome temos os nomes José, Daniella, Ana e null. Na coluna código do cargo temos os números 3, 1, 2 e null. Na coluna descrição temos gerente, vendedor e caixa 

Foram retornados todos os cargos, incluindo aqueles que estão associados a alguma pessoa funcionária, e os que não estão associados a  nenhuma. 

FULL JOIN 

O FULL JOIN é utilizado quando queremos retornar registros que tenham correspondência em qualquer uma das tabelas presentes na junção. Observe que, na imagem a seguir, é utilizado o FULL JOIN. Nesse caso, todos os registros do conjunto B e todos os registros do conjunto A seriam retornados: 

Duas circunferências representando um conjunto A é um conjunto B, onde os dois conjuntos e a interseção entre os dois conjuntos está pintada de azul 

SELECT com FULL JOIN: 

SELECT <select_list> FROM Tabela A FULL JOIN Tabela B ON A.Key = B.Key 
SELECT A.nome, A.cod_cargo, B.descrição FROM funcionario A FULL JOIN cargo B ON A.cod_cargo = B.cod_cargo;

Resultado 

Tabela com 3 colunas, sendo resultante da query executada com FULL JOIN. Na coluna nome temos os nomes José, Daniella, Ana, Carlos e null. Na coluna código do cargo temos os números 3, 1, 2, null e null. Na coluna descrição temos gerente, vendedor, caixa, null e entregador. 

Foram retornadas todasas pessoas funcionárias, mesmo os que não estão associados a um cargo e todos os cargos, mesmo aqueles sem associação. 

CROSS JOIN 

O CROSS  JOIN é utilizado quando queremos retornar os  registros realizando um cruzamento entre os dados das tabelas presentes na junção. Observe que, na imagem a seguir, é utilizado o CROSS JOIN. Nesse caso, todos os registros do conjunto A realizam um cruzamento com todos os registros do conjunto B para serem retornados: 

Duas circunferências representando um conjunto A e um conjunto B. Em cada conjunto estão os números de 1 a 3. Cada número do conjunto A se liga a um número do conjunto B através de uma linha 

SELECT com CROSS JOIN: 

SELECT <select_list> FROM Tabela A CROSS  JOIN Tabela B 
SELECT A.nome, A.cod_cargo, B.descrição, B.cod_cargo FROM funcionario A CROSS JOIN cargo B;

Resultado 

Tabela com 4 colunas, sendo resultante da query executada com CROSS JOIN. Na coluna nome temos os nomes José, Daniella, Ana, Carlos repetidos quatro vezes nas linhas subsequentes. Na coluna código do cargo, que pertence a tabela de funcionários temos a sequência 3, 1, 2 e null repetida quatro vezes nas linhas subsequentes. Na coluna descrição é apresentado 4 vezes o nome vendedor, 4 vezes o nome caixa, 4 vezes o nome gerente e 4 vezes o nome entregador. Na coluna do cargo 1, que pertence a tabela de cargo temos quatro sequências de quatro números repetidos de 1 a 4 

Foi realizado o cruzamento entre todos os registros da tabela de funcionários com todos os registros da tabela de cargos. 

CONCLUSÃO 

Neste artigo podemos ver como os joins são de suma importância para a linguagem SQL. Ao utilizar os JOINS, podemos realizar a combinação de colunas de uma ou mais tabelas para realizar consultas complexas nos bancos de dados de forma simples. 

Gostou deste artigo e quer conhecer ainda mais sobre banco de dados e SQL? 

A Trilha Alura de Modelagem de Dados foi feita para você! Acesse a formação e descubra o que mais você pode fazer com banco de dados e SQL. 

Avalie este artigo

Danielle Oliveira
Danielle Oliveira

Danielle é formada em Sistemas de Informação. Fez parte do Scuba Team. Atualmente é instrutora de Data Science, nas áreas de Banco de dados, Business Intelligence e NoSQL. É apaixonada por livros, música e tecnologia.

Veja outros artigos sobre Data Science