JOIN no SQL: o que é, tipos e como usar na prática

Bancos de dados podem parecer verdadeiros quebra-cabeças misturados sem a estratégia e as ferramentas certas para montá-los. Com a cláusula JOIN no SQL, por sua vez, você passa a ter essas informações tão valiosas, e que deixam de estar desconectadas.

JOIN no SQL é a cláusula que combina linhas de duas ou mais tabelas em uma única consulta, ligando os registros por uma coluna em comum. Os tipos mais usados são o INNER JOIN (só o que existe nas duas tabelas), o LEFT e o RIGHT JOIN (tudo de um lado mais o que casa do outro) e o FULL JOIN (tudo das duas).

Com o seu uso é possível transformar dados isolados em respostas estratégicas para negócios e análises. Afinal, os JOINs são o divisor de águas entre quem apenas consulta tabelas e quem realmente consegue extrair significado dos dados. 

Vamos ver, então, como os JOINs funcionam tecnicamente, e também aprender como aplicá-los de forma inteligente em seus projetos. Boa leitura!

O que é JOIN em SQL e para que serve?

No SQL, JOIN é o comando que permite combinar dados de duas ou mais tabelas em uma consulta. Funciona a partir da conexão de registros relacionados entre si, geralmente por meio de chaves (uma chave primária, em uma tabela, e uma chave estrangeira em outra).

Agora, você pode estar se perguntando: “por que preciso usar JOIN?”.

Leia também: Saia do Zero em SQL em Menos de 15 Minutos

Simplesmente, porque bancos de dados reais não armazenam tudo em uma única tabela. Imagine um sistema de e-commerce:

  • Os clientes estão em uma tabela (clientes);
  • Os pedidos, em outra (pedidos);
  • Os produtos, em outra (produtos).

Se você quiser saber “Quais produtos o cliente X comprou?”, precisará “juntar” (JOIN) essas tabelas. Sem o JOIN, você teria que fazer consultas separadas e manualmente cruzar os dados — um processo lento e ineficiente.

Com isso, a cláusula resolve dois problemas principais:

  1. Evita redundância: em vez de repetir informações do cliente em cada pedido, você armazena só uma vez na tabela clientes e referencia pelo ID;
  2. Permite consultas complexas: você pode filtrar, ordenar e calcular dados combinados de várias tabelas em uma única operação.

As explicações fazem sentido para você até aqui? Caso seja iniciante no tema, aproveite para usar um dicionário de SQL para te ajudar com o restante deste conteúdo.

Quais são os principais conceitos de JOIN em SQL?

Antes de mergulharmos nos tipos de JOIN, é essencial entender dois pilares que tornam esses relacionamentos possíveis:

  1. Como as tabelas se conectam (chaves primárias e estrangeiras);
  2. Que tipo de informação cada tabela armazena (fatos vs. dimensões).

Dominar esses conceitos é como aprender a gramática antes de escrever frases complexas, e vamos desvendar cada um deles a seguir.

Chave primária e chave estrangeira

O primeiro conceito que vamos abordar será compreender o que é uma chave primária e uma chave estrangeira.

A chave primária é a coluna que identifica as informações distintas em uma tabela, geralmente sendo a coluna de ID. Toda tabela possui uma e apenas uma chave primária, que serve como identificador único. Essa coluna não pode conter valores repetidos.

Por outro lado, a chave estrangeira é uma coluna que permite relacionar as linhas de uma segunda tabela com a chave primária da primeira tabela.

Chave Primária e Chave Estrangeira

Na tabela Produto, a coluna id_subcategoria é a chave estrangeira que nos permite relacionar essa tabela com a tabela Categoria, indicando a qual categoria cada produto pertence.

Tabela fato e tabela dimensão

Dentro de um banco de dados, encontraremos várias tabelas e elas poderão ser classificadas em dois tipos: tabela fato e tabela dimensão. Esse é outro conceito importante que vale a pena conhecer.

A tabela dimensão, também conhecida como tabela de características, contém as informações e as características de um determinado elemento. Por exemplo, uma tabela com nome, preço e marca de um produto.

Nessa tabela, nenhum dos elementos principais se repetirá, e é nela que encontraremos as chaves primárias.

Por sua vez, a tabela fato armazena os acontecimentos de uma determinada empresa. Por exemplo, uma tabela de vendas que registrará a data da venda, a loja onde ocorreu, o funcionário responsável, entre outros dados assim.

Geralmente, essa será uma tabela com milhares de informações, principalmente colunas de ID que usamos para relacioná-las com uma tabela dimensão.

Tabela Fato e Tabela Dimensão

Nesse exemplo temos a tabela dimensão (DimChannel) que resume 4 canais de vendas de uma empresa, e a tabela fato (FactSales) que registra as vendas em si. Podemos observar que essas tabelas se relacionam por meio da coluna ChannelKey.

Quais são os tipos de JOIN em SQL?

Os JOINs em SQL são como diferentes modos de cruzar informações entre tabelas e saber qual tipo usar é a diferença entre:

  • Extrair exatamente o que você precisa;
  • Gerar resultados incompletos ou distorcidos;
  • Criar consultas eficientes vs. consultas que travam o banco.

Vamos explorar os 5 tipos fundamentais, com exemplos práticos que mostram quando e por que aplicar cada um.

Tipos Join SQL ilustração com desenhos

INNER JOIN

O INNER JOIN traz uma ideia muito intuitiva: a de buscar a intersecção entre as tabelas (“A ∩ B” da imagem principal acima). Ou seja, resulta em uma tabela que traz os valores que estão em ambas as tabelas iniciais.

Vamos recuperar o exemplo das vendas em diferentes lojas. Ao aplicar o INNER JOIN no SQL, é possível obter como resultado somente os produtos vendidos nas duas lojas.

A sintaxe é desenvolvida assim:

  • FROM tabela1 AS t
  • INNER JOIN tabela2 AS tp
  • ON t.produto = tp.produto 

LEFT JOIN

Já o LEFT JOIN é um pouco mais complexo. Resulta em uma tabela que exibe somente os itens da tabela da esquerda, incluindo os itens em interseção com a tabela direita. Contudo, exclui da relação o resto da tabela da direita.

É como a ideia da subtração que também considera a intersecção. É uma forma de recuperar por completo todos os dados da tabela da esquerda sem perder os que também estão relacionados com a direita.

No nosso exemplo, seria como pegar as vendas da loja 1, em uma listagem completa dessas vendas, o que inclui os produtos unicamente vendidos lá e os produtos que possam ter sido vendidos na loja 2.

A sintaxe: 

  • FROM tabela1 AS t
  • LEFT JOIN tabela2 AS tp
  • ON t.produto = tp.produto 

Uma variação desse LEFT JOIN é o LEFT EXCLUDING JOIN, que pega apenas os valores únicos da tabela da esquerda. Está representado pelo “A – B” na imagem acima.

RIGHT JOIN

O RIGHT JOIN segue a mesma lógica do LEFT, só que para a outra tabela. Pega os dados completos da tabela da direita, incluindo os que também estão na tabela da esquerda.

A sintaxe também é muito similar. 

Da mesma forma, temos a variação do RIGHT EXCLUDING JOIN, que pega apenas os valores únicos da tabela da direita (representado pelo “B-A” da imagem).

FULL JOIN

O FULL JOIN é o comando para pegar todos os valores das duas tabelas e unir em uma única resultante. É representado pelo “A U B” da imagem principal. 

É como pegar todos os produtos vendidos nas duas lojas da empresa e juntar todos esses registros para facilitar o controle ou a manipulação geral, por exemplo.

Esse conceito é similar à operação de união da teoria dos conjuntos. 

A sintaxe fica assim:

  • FROM tabela1 AS t
  • FULL OUTER JOIN tabela2 AS tp
  • ON t.produto = tp.produto

A variação aqui é o FULL EXCLUDING JOIN, que exclui a interseção, ou seja, os valores em comum. Assim, pega os produtos vendidos unicamente nas lojas, sem aqueles que foram vendidos em ambas as lojas. 

Programador fazendo sql join

CROSS JOIN

O CROSS JOIN executa uma operação mais complexa, em que todos os itens de uma tabela estarão associados a cada item da outra. 

Assim, se a tabela 2 tem 7 itens e a tabela 1 tem apenas 2, cada um dos dois itens da tabela 1 será representado 7 vezes na nova tabela (com relação com todos os itens da tabela 2).

A sintaxe é algo assim:

  • FROM tabela1 AS t
  • CROSS JOIN tabela2 AS tp
  •  WHERE t.id = 1 OR tp.id = 1
Ícone SQLSQL Impressionador

Domine a linguagem mais importante do Mundo para quem trabalha com Dados, seja para se destacar na sua empresa atual, para conseguir um diferencial em processos seletivos ou até mesmo para entrar em áreas de dados.

Começar agoraSeta para a direita
Fundo SQLTelas SQL
Luz SQL

Como usar o JOIN no SQL na prática?

Dominar a teoria dos JOINs é importante, mas saber quando e como aplicá-los é o que realmente faz a diferença. Aqui está um guia para implementá-los.

Resumo do vídeo: a aula mostra o JOIN funcionando dentro de uma consulta real: identificar quais tabelas guardam os dados e qual coluna faz a ligação entre elas, escolher o tipo de JOIN certo para a pergunta que você quer responder, escrever a sintaxe com FROM, JOIN e ON e conferir se o número de linhas do resultado faz sentido.

Neste vídeo você aprende:

  • como identificar as tabelas envolvidas e a chave que as relaciona;
  • como escolher entre INNER, LEFT e FULL JOIN conforme o resultado desejado;
  • a estrutura da consulta: SELECT, FROM, JOIN e a condição ON;
  • por que esquecer o ON impede o JOIN de funcionar;
  • como testar o resultado antes de usar a consulta para valer.

Para receber por e-mail o(s) arquivo(s) utilizados no vídeo, preencha:

1. Identifique as tabelas e relacionamentos

Antes de escrever qualquer JOIN, responda:

  • Quais tabelas contêm os dados que você precisa?
  • Como elas se conectam? (Qual é a chave primária e estrangeira?)

2. Escolha o tipo de JOIN adequado

Use o fluxo para decidir se precisa apenas dos registros relacionados (INNER JOIN), se você deseja que todos os registros da tabela principal, mesmo sem relação (LEFT JOIN) ou se precisa de todos os registros, combinados ou não (FULL JOIN).

3. Escreva a sintaxe corretamente

A estrutura básica é:

SQL
SELECT colunas

FROM tabela_principal

[TIPO] JOIN tabela_secundaria ON tabela_principal.chave = tabela_secundaria.chave

Erro comum: Esquecer o ON – sem ele, o JOIN não funciona!

4. Teste e otimize

Execute em um ambiente de teste primeiro, verifique se o resultado tem o número esperado de linhas e use EXPLAIN (disponível em alguns bancos) para analisar a performance.

Exemplos práticos de uso do JOIN no SQL

Os JOINs ganham vida quando aplicados a situações reais. Veja como eles resolvem problemas concretos em dois cenários comuns.

1. Análise de vendas: descobrindo o cliente por trás de cada pedido

Problema: você tem uma tabela de pedidos com IDs de clientes, mas precisa gerar um relatório com nomes e e-mails dos compradores. Assim, vamos à sintaxe:

SQL
SELECT

    c.nome AS cliente,

    c.email,

    p.id_pedido,

    p.valor_total,

    p.data_compra

FROM pedidos p

INNER JOIN clientes c ON p.id_cliente = c.id

WHERE p.data_compra BETWEEN '2023-01-01' AND '2023-12-31'

ORDER BY p.valor_total DESC;

Por que esse JOIN é valioso? Primeiro, porque transforma números frios (IDs) em informações acionáveis (nomes e contatos). E também permite filtrar por período (WHERE) e ordenar por valor (ORDER BY). Além disso, o INNER JOIN garante que só apareçam pedidos com clientes válidos

2. Gestão de conteúdo: posts e autores em um blog

Problema: seu sistema armazena posts em uma tabela e autores em outra. Como mostrar todos os posts, mesmo os sem autor atribuído?

SQL
SELECT 

    p.titulo,

    p.data_publicacao,

    COALESCE(a.nome, 'Autor Desconhecido') AS autor,

    a.bio

FROM posts p

LEFT JOIN autores a ON p.id_autor = a.id

WHERE p.status = 'publicado'

LIMIT 10;

O que esse JOIN faz de especial?

  • LEFT JOIN preserva todos os posts, mesmo os sem autor;
  • COALESCE substitui valores NULL por um texto amigável;
  • Filtra só os publicados (WHERE) e limita a 10 resultados (LIMIT).

Quais são os cuidados ao usar o JOIN no SQL?

O JOIN no SQL exige atenção, pois um pequeno descuido pode transformar sua consulta em um pesadelo de lentidão ou resultados incorretos. 

Veja os principais riscos e como evitá-los!

1. O perigo dos JOINs desnecessários

Adicionar JOINs “só por garantia” aumenta drasticamente o tempo de processamento. Mas a solução é simples: liste apenas as tabelas cujos dados você realmente precisa.

2. O efeito cascata dos JOINs mal escritos

Um JOIN mal estruturado pode multiplicar linhas (uma venda vira 10 registros se JOIN com itens) também trazer dados inconsistentes (NULLs onde não deveriam existir)

Por isso, aqui vão duas dicas valiosas:

  1. Sempre teste com SELECT COUNT(*) antes da consulta final;
  2. Verifique se o número de linhas retornadas faz sentido.

3. Quando o banco de dados grita por ajuda

JOINs complexos podem sobrecarregar o servidor. Sinais de alerta:

  • Consultas que demoram minutos;
  • Aumento repentino no uso da CPU.

Entre as táticas de otimização, podemos destacar para você filtrar antes do JOIN (use WHERE cedo) e garantir que as colunas de JOIN tenham índices.

Profissional usando sql join

E quais as boas práticas ao criar JOIN no SQL?

É importante se atentar para algumas dicas de como usar o comando JOIN no SQL de uma maneira eficiente.

Caso prefira esse conteúdo no formato de videoaula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Resumo do vídeo: esta aula reúne as boas práticas que deixam um JOIN legível e eficiente: selecionar apenas as colunas necessárias, manter a sequência das colunas alinhada à ordem das tabelas, usar aliases para encurtar a consulta, indentar o código e comentar a lógica dos JOINs mais complexos.

Neste vídeo você aprende:

  • por que evitar trazer todas as colunas de todas as tabelas do JOIN;
  • como organizar a sequência das colunas seguindo a ordem das tabelas;
  • como usar aliases (v, p, c) para deixar a consulta mais curta e clara;
  • como indentar a consulta na mão ou com o Beautify do MySQL;
  • quando vale a pena comentar a lógica de um JOIN complexo.

Especificar claramente as colunas, manter a organização, utilizar aliases, fazer a indentação e adicionar comentários são passos essenciais para escrever códigos SQL profissionais e eficientes.

Outra dica essencial é saber exatamente as diferenças entre os comandos do SQL. Assim, você poderá ter uma boa visão de como usá-los e poderá fazer a filtragem do jeito que deseja.

Leia também: Comandos em SQL que você precisa aprender!

Os JOINs são fundamentais no SQL para combinar dados de diferentes tabelas. No entanto, sua implementação pode ser complexa e, se não forem seguidas boas práticas, pode resultar em códigos confusos e ineficientes.

Agora vou te mostrar as 5 melhores práticas ao criar JOINs no SQL para otimizar suas consultas e melhorar a eficiência do seu código SQL.

Especifique claramente as colunas necessárias

Ao realizar um JOIN, é comum selecionar todas as colunas de todas as tabelas envolvidas. No entanto, isso pode gerar um grande volume de dados desnecessários, tornando a consulta menos eficiente e mais difícil de entender.

Especificar apenas as colunas necessárias otimiza a consulta e facilita a análise dos resultados.

SQL
SELECT data_venda, qtd_vendida, nome_produto, marca_produto, nome, email FROM vendas

LEFT JOIN produtos ON vendas.id_produto = produtos.id_produto

LEFT JOIN clientes ON vendas.id_cliente = clientes.id_cliente;
resultado consulta sql

Neste exemplo, apenas as colunas necessárias são selecionadas, reduzindo a complexidade do resultado e facilitando a sua análise e compreensão.

Mantenha a organização na sequência das colunas

Organizar as colunas em uma sequência lógica melhora a legibilidade do código. Uma boa prática é listar as colunas na mesma ordem em que as tabelas são mencionadas no JOIN.

Primeiro as colunas da primeira tabela, depois as colunas da segunda tabela e assim por diante. Manter a organização evita confusões e facilita a manutenção do código.

Utilize aliases para tabelas e colunas

Aliases são apelidos dados às tabelas e colunas para simplificar e encurtar o código SQL. Isso é particularmente útil quando os nomes das tabelas ou colunas são longos ou quando há múltiplas tabelas envolvidas na consulta.

Para atribuir um alias a uma tabela, basta, após o nome dela, dar um espaço e declarar o alias desejado. Por exemplo, vamos substituir vendas por v, produtos por p e clientes por c.

SQL
SELECT data_venda, qtd_vendida, nome_produto, marca_produto, nome, email FROM vendas v

LEFT JOIN produtos p ON v.id_produto = p.id_produto

LEFT JOIN clientes c ON v.id_cliente = c.id_cliente;

O uso de aliases torna o código mais limpo e fácil de ler.

Indentação do código

Indentar o código SQL melhora significativamente sua legibilidade. Separar diferentes partes da consulta em linhas distintas ajuda a visualizar a estrutura da consulta e entender rapidamente quais tabelas estão sendo combinadas e como.

A indentação correta torna o código mais organizado e fácil de manter.

SQL
SELECT

    data_venda,

    qtd_vendida,

    nome_produto,

    marca_produto,

    nome,

    email

FROM

    vendas v

        LEFT JOIN

    produtos p ON v.id_produto = p.id_produto

        LEFT JOIN

    clientes c ON v.id_cliente = c.id_cliente;

Você pode fazer esse processo de forma manual ou, no MySQL, usar a opção Beautify para formatar automaticamente o seu código.

Beautify

Use comentários para explicar JOINs complexos

Adicionar comentários ao código SQL é uma prática que facilita o entendimento, especialmente quando o código é revisado por outra pessoa.

Comentários são úteis para explicar a lógica por trás de JOINs complexos e fornecer contexto adicional sobre a consulta.

SQL
SELECT

    v.data_venda,

    v.qtd_vendida,

    p.nome_produto,

    p.marca_produto,

    c.nome,

    c.email

-- esse código relaciona as tabelas de vendas (v), produtos (p) e clientes (c)

-- eu simplifiquei os nomes das tabelas (v, c, p) por conta do alias

FROM

    vendas v

        LEFT JOIN

    produtos p ON v.id_produto = p.id_produto

        LEFT JOIN

    clientes c ON v.id_cliente = c.id_cliente;

Os comentários ajudam a documentar o código, tornando-o mais acessível para outros desenvolvedores.

Como aprender mais sobre os comandos SQL?

Você já sentiu aquela frustração quando uma consulta não retorna o que você precisa, ou quando o banco de dados parece travar sem motivo? Eu já estive aí. A verdade é que SQL não é só sobre escrever códigos, mas sobre entender a história por trás dos dados.

E se você pudesse:

  • Descobrir exatamente qual JOIN usar em cada situação?
  • Transformar aquela massa de dados em insights valiosos?
  • Impressionar seu chefe ou cliente com relatórios precisos e rápidos?

O segredo está em aprender com quem já passou pelos mesmos desafios. No Curso de SQL da Hashtag Treinamentos, você vai dominar JOINs na prática, com exemplos do mundo real, aprender a evitar armadilhas que ninguém te conta e ganhar confiança para trabalhar com qualquer banco de dados

Não fique só na teoria: transforme seus dados em resultados reais hoje mesmo.

Perguntas frequentes sobre JOIN no SQL

1. O que é JOIN no SQL?

É a cláusula que combina linhas de duas ou mais tabelas em uma única consulta, ligando os registros por uma coluna em comum, normalmente a chave primária de uma tabela e a chave estrangeira da outra.

2. Quais são os tipos de JOIN no SQL?

Os principais são INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN e CROSS JOIN. O que muda é o que entra no resultado: só o que existe nas duas tabelas, tudo de um dos lados, tudo das duas ou todas as combinações possíveis entre elas.

3. Qual a diferença entre INNER JOIN e LEFT JOIN?

O INNER JOIN devolve apenas as linhas que têm correspondência nas duas tabelas. O LEFT JOIN devolve todas as linhas da tabela da esquerda, inclusive as sem correspondência, preenchendo com NULL as colunas que vêm do outro lado.

4. Como escrever um JOIN no SQL?

A estrutura é SELECT colunas FROM tabela_principal JOIN tabela_secundaria ON tabela_principal.chave = tabela_secundaria.chave. A condição ON é obrigatória: sem ela, o JOIN não funciona.

5. Como deixar uma consulta com JOIN mais rápida?

Selecione apenas as colunas necessárias, filtre com WHERE antes de cruzar as tabelas, garanta índices nas colunas usadas no ON e confira a contagem de linhas com SELECT COUNT para detectar multiplicação de registros.

Conclusão

Dominar SQL é entender que cada JOIN conta uma história diferente, saber que performance é tão importante quanto o resultado e ter a liberdade de extrair exatamente o que precisa dos dados

E o melhor? Você pode começar agora. Conte com a Hashtag Treinamentos para isso!

Hashtag Treinamentos

Para acessar outras publicações de SQL, clique aqui!


Quer aprender mais sobre SQL com um minicurso básico gratuito?

Posts mais recentes de SQL

Posts mais recentes da Hashtag Treinamentos