JOIN e seus tipos

JOIN e seus tipos
Danielle Oliveira
Danielle Oliveira

Compartilhe

No SQL existem várias formas de realizar consultas no banco de dados utilizando desde queries simples a queries mais complexas. Um exemplo disso é 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.

5 retângulos dispostos um abaixo do outro, onde cada um tem o nome de um JOIN, na seguinte ordem, INNER, LEFT, RIGHT, FULL e CROSS. Ao lado dos 5 retângulos temos mais 1 retângulo com a palavra JOIN ligado a eles por uma linha

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, que realizam consultas de formas diferentes nas tabelas do banco de dados, o INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN e CROSS JOIN. 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 retornados todos funcionários, 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.

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 retornados todos funcionários, tem um cargo associado a ele, juntamente com todos os funcionários que não tem um cargo associado.

RIGHT JOIN

O RIGHT JOIN é utilizado quando queremos retornar apenas os registros da tabela da direita(tabela que está após a cláusula RIGHT JOIN) e os registros que tenham correspondência na tabela da 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 que estão associados a um funcionário, juntamente com todos os cargos que não estão associados a funcionário.

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 retornados todos os funcionários, mesmo os que não estão associados a um cargo e todos os cargos, mesmo os que não estão associados a um funcionário.

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 Formação 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.

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