Voltar para a lista de artigos Artigos
9 minutos de leitura

Quais são os diferentes tipos de SQL JOIN?

Você simplesmente não pode subestimar a importância do JOIN ao aprender SQL. Não só é uma das operações mais fundamentais em bancos de dados relacionais, mas também é muito versátil com muitos tipos diferentes. Embora o SQL JOIN possa ser intimidante no início, ele se torna um instrumento muito útil em seu arsenal, uma vez que você o compreenda. Vamos explorar todos os tipos de SQL JOIN!

Podemos dizer com segurança que a operação JOIN é uma das características mais poderosas do SQL JOIN. É a fonte de inveja para todos os SGBDs não-relacionais (sistemas de gerenciamento de banco de dados) - é um conceito muito simples, mas amplamente aplicável em casos que juntam dois conjuntos de dados.

Em resumo, o JOIN é uma operação em que as tabelas são comparadas entre si, linha por linha. Esta comparação permite a saída de colunas a partir de qualquer tabela envolvida no JOIN.

Um ótimo lugar para exercícios após a leitura deste artigo é nosso curso interativo de Cláusulas JOIN em SQL curso. Ele oferece mais de 90 exercícios práticos sobre diferentes tipos de articulações aqui discutidas.

Agora, vamos criar 2 mesas para que possamos explorar e dominar a arte de JOIN. Nossa primeira mesa, employees, consiste em 5 colunas:

  • id - A identificação única do funcionário.
  • name - O nome do funcionário.
  • specialization - A especialização do funcionário na empresa.
  • coach_id - O ID do treinador/mentor do funcionário. Este é outro funcionário de uma empresa.
  • project_id - A identificação do projeto atual no qual o funcionário está envolvido.
idnamespecializationcoach_idproject_id
1Olli WoodwardDeveloper41
2Pete NolanManagerNULL1
3Will BarkerIT Support43
4Uma NormanDeveloperNULL4
5Peggy BergManager24
6Mary SheltonAnalystNULLNULL

A segunda tabela é projects. Ela contém 3 colunas:

  • id - A identificação única do projeto.
  • name - O nome do projeto.
  • is_external - Um valor booleano que representa se o projeto é externo ou interno.
idnameis_external
1Website UI/UX DesignTRUE
2Research & DevelopmentFALSE
3SupportFALSE
4Database Architecture DesignTRUE

Note que existe uma conexão lógica entre as duas tabelas. O project_id em employees corresponde ao id de projects. Os valores correspondentes em todas as tabelas são codificados por cores para uma melhor apresentação.

Agora que temos as tabelas, vamos direto ao assunto!

INNER JOIN (também conhecido como JOIN)

O primeiro dos tipos de SQL JOIN é o INNER JOIN. Quando você digita "JOIN" em seu código SQL, ele usa o INNER JOIN. Assim, embora não doa, você não precisa escrever INNER em suas consultas.

Uma palavra-chave ON segue todos os tipos de JOINs em SQL. Ela indica o início da condição de conexão. INNER JOINs Como todos os outros JOINs, produz apenas as linhas que satisfazem a condição de conexão.

Antes de prosseguir, observe que o operador JOIN não é a única forma de unir dados de duas tabelas. Você também pode usar WHERE. Interessado em saber mais sobre isso? Nós temos o artigo certo para você!

Mas deixemos a teoria de lado por um momento e passemos à codificação. Vamos usar nossas duas tabelas e um INNER JOIN para descobrir qual funcionário trabalha em qual projeto:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
JOIN projects
 ON employees.project_id = projects.id

Antes de analisarmos o resultado desta consulta, vamos analisar a própria consulta. Como você pode ver, juntamos as duas tabelas usando JOIN. Após JOIN, especificamos o operador ON e a condição da junção.

Portanto, juntamos as tabelas com base na condição de que project_id da tabela employees é igual à identificação da tabela projects. Vejamos o resultado da consulta:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design

Vemos que Olli Woodward e Pete Nolan têm um projeto "Website UI/UX Design". O project_id deles é igual a 1, que é a identificação deste projeto na tabela projects. O mesmo vale para outras filas no resultado.

Entretanto, não vemos Mary Shelton aqui. Seu project_id é NULL, e não há projeto com o id igual a NULL. Da mesma forma, o projeto "Pesquisa & Desenvolvimento" tem o ID 2, mas nenhum funcionário tem o project_id igual a 2.

Você está interessado no INNER JOIN e quer saber mais sobre seus meandros? Dê uma olhada em nosso artigo especificamente sobre o INNER JOIN!

UNIÃO EXTERNA ESQUERDA

O LEFT OUTER JOIN é um dos tipos externos de SQL JOIN. A palavra-chave OUTER é opcional e é freqüentemente omitida, deixando-nos apenas com o operador LEFT JOIN.

A diferença geral entre o OUTER JOIN e o INNER JOIN é que o OUTER JOIN inclui não apenas as linhas que satisfazem a condição de conexão, mas também as linhas que não satisfazem a condição de uma (ou mais) das tabelas.

Voltando ao LEFT OUTER JOIN especificamente, ele inclui as linhas que satisfazem a condição de conexão (assim como o INNER JOIN) e todas as outras linhas da tabela da esquerda (ou da primeira). Vamos usar nosso exemplo anterior, mudando JOIN para LEFT JOIN para ver a diferença:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
LEFT JOIN projects
 ON employees.project_id = projects.id

E aqui está o resultado da consulta:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
Mary SheltonAnalystNULL

Como podem ver, foi acrescentada mais uma fila: Mary Shelton com o projeto NULL. Esta fila em particular não satisfaz a condição employees.project_id = projects.id, pois não há projetos com um ID NULL. Mas esta fileira existe no employees tabela, de modo que é adicionado ao resultado. O nome do projeto para Mary Shelton é um valor NULL pelo mesmo motivo, já que não há identificações de NULL entre os projetos.

Agora você tem a idéia principal do LEFT OUTER JOIN. Dito isto, você sempre pode ler nosso artigo sobre o LEFT OUTER JOIN para saber mais sobre ele ou ver mais exemplos dele!

INNER e LEFT OUTER JOINs são os tipos mais comuns de JOIN em SQL. Portanto, não deixe de praticá-lo com nosso Cláusulas JOIN em SQL curso. Leia sobre o curso aqui.

JUNÇÃO EXTERNA DIREITA

O RIGHT OUTER JOIN pode ser visto como um irmão gêmeo do LEFT OUTER JOIN. A única diferença entre estes dois tipos de SQL JOIN é a tabela da qual os registros são tirados, independentemente da condição JOIN. No LEFT OUTER JOIN, que é a primeira tabela ou a da esquerda; no RIGHT OUTER JOIN, é a segunda tabela ou a da direita.

Vamos usar o exemplo anterior, mas agora mudemos LEFT JOIN para RIGHT JOIN:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
RIGHT JOIN projects
 ON employees.project_id = projects.id

Agora, vamos analisar o resultado da consulta:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
NULLNULLResearch & Development

Como podemos ver, o registro de Mary Shelton desapareceu agora. Ele não satisfaz a condição ON, nem pertence à mesa da direita. Portanto, não está incluída no resultado aqui.

Por outro lado, agora temos aqui o projeto "Pesquisa & Desenvolvimento". Ele não satisfaz a condição JOIN, mas existe na tabela da direita, portanto está incluído no resultado. Note que esta linha tem NULLs nas colunas empregado e specialization. Isto porque não há registro na tabela employees A tabela tem project_id igual a 2, o ID deste projeto. Portanto, um NULL é devolvido em seu lugar.

UNIÃO EXTERNA COMPLETA

O FULL OUTER JOIN, ou simplesmente FULL JOIN, é o último tipo do OUTER JOIN. De certa forma, ele combina LEFT e RIGHT OUTER JOINs.

Embora inclua registros que satisfazem a condição JOIN, também inclui linhas de ambas as tabelas que não o fazem. Ou seja, um FULL JOIN retorna todas as linhas de ambas as tabelas. Se uma linha de uma tabela não tiver um registro correspondente da outra tabela, então os dados que faltam são preenchidos com NULLs.

Vamos ver um exemplo do FULL OUTER JOIN:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
FULL JOIN projects
 ON employees.project_id = projects.id

Aqui está o resultado:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
Mary SheltonAnalystNULL
NULLNULLResearch & Development

Como você pode ver, aqui temos todas as fileiras de ambas as tabelas. As filas que satisfazem a condição têm os dados correspondentes de ambas as tabelas. Para as linhas que não atendem, as colunas da outra tabela são preenchidas com NULLs.

Se você quiser uma breve descrição acessível do FULL OUTER JOIN assim como de outros tipos de SQL JOIN, use nossa folha de trapaça SQL JOIN.

CROSS JOIN

Este tipo de SQL JOIN é bastante diferente dos mencionados até agora neste artigo. Não apenas seu propósito é diferente, mas também tem uma sintaxe ligeiramente diferente.

Quando usado em uma consulta, um CROSS JOIN retorna um produto cartesiano - todas as combinações possíveis das linhas de ambas as tabelas. Todos os registros de uma tabela são automaticamente unidos com todos os registros da outra.

Além disso, não há nenhuma condição ON. Para isso JOIN em uma consulta, basta usar o operador CROSS JOIN sem seguir com a palavra-chave ON.

Vejamos como tudo isso funciona em um exemplo:

SELECT
 employees.name as employee,
 projects.name as project
FROM employees
CROSS JOIN projects

Note que selecionamos duas colunas, o nome do funcionário e o nome do projeto, seguido por CROSS JOIN. Vejamos o resultado:

employeeproject
Olli WoodwardWebsite UI/UX Design
Olli WoodwardResearch & Development
Olli WoodwardSupport
Olli WoodwardDatabase Architecture Design
Pete NolanWebsite UI/UX Design
Pete NolanResearch & Development
Pete NolanSupport
Pete NolanDatabase Architecture Design
Will BarkerWebsite UI/UX Design
Will BarkerResearch & Development
Will BarkerSupport
Will BarkerDatabase Architecture Design
Uma NormanWebsite UI/UX Design
Uma NormanResearch & Development
Uma NormanSupport
Uma NormanDatabase Architecture Design
Peggy BergWebsite UI/UX Design
Peggy BergResearch & Development
Peggy BergSupport
Peggy BergDatabase Architecture Design
Mary SheltonWebsite UI/UX Design
Mary SheltonResearch & Development
Mary SheltonSupport
Mary SheltonDatabase Architecture Design

Anote o número de linhas que ele retorna. É muito fácil calcular isto: o número de linhas na primeira tabela * o número de linhas na segunda tabela = o número de linhas resultantes . Assim, cada um dos 6 funcionários é atribuído a cada um dos 4 projetos.

Você ainda tem algumas perguntas persistentes sobre o CROSS JOIN? Ou talvez você só queira saber mais sobre ele. Confira nosso Guia Ilustrado para o SQL CROSS JOIN!

Pratique todos os tipos de SQL JOIN JOIN!

Agora você sabe sobre os diferentes tipos de JOIN em SQL. Esta é uma grande oportunidade para aprofundar este novo conhecimento ou simplesmente rever o que você já sabe. De qualquer forma, eu recomendo nosso grande curso interativo de SQL JOIN. Com mais de 90 exercícios práticos, é uma oportunidade de praticar este aspecto fundamental do SQL!