Voltar para a lista de artigos Artigos
9 minutos de leitura

A combinação perfeita: SQL Joins explicados

Nem todo convite leva a uma combinação perfeita — e o mesmo se aplica ao SQL. Este artigo explica oCláusulas JOIN em SQLs usando um exemplo de lista de convidados para uma festa, ajudando você a entender como os diferentes tipos de JOINs determinam quais registros aparecem no resultado.

Fevereiro é o mês do amor. Os aplicativos de namoro falam sobre combinações, convites são enviados para eventos de Dia dos Namorados e todos esperam que as coisas deem certo.

No SQL, lidamos com correspondências o tempo todo — só que de uma forma mais prática. Os dados geralmente estão espalhados por várias tabelas. Para analisá-los, precisamos combinar tabelas com base em valores correspondentes. É exatamente isso que as junções (Cláusulas JOIN em SQL) fazem. Elas conectam linhas de tabelas diferentes usando uma coluna compartilhada e decidem quais registros aparecem juntos no resultado.

Para iniciantes, isso pode parecer abstrato no início. Termos como INNER JOIN ou LEFT JOIN descrevem regras precisas, mas sem uma imagem clara, é fácil perder o foco do que realmente está acontecendo.

Domine a arte da correspondência
Se você deseja evitar suposições e começar a escrever consultas como um profissional, o curso Cláusulas JOIN em SQL em LearnSQL.com.br é a escolha perfeita. Com 93 exercícios práticos, ele foi projetado para levá-lo de “É complicado” a “Especialista em SQL” usando cenários do mundo real. É a maneira mais rápida de tornar as JOINs algo natural.

Neste artigo, usaremos uma metáfora simples do Dia dos Namorados para explicar o Cláusulas JOIN em SQL de maneira clara e intuitiva.

A configuração

Imagine que você está organizando uma festa. Pode ser um evento de Dia dos Namorados, uma festa para solteiros ou apenas uma reunião informal — os detalhes não importam.

Antes da festa, você cria uma lista das pessoas que convidou. A festa acontece e, depois, você pode ver o que realmente aconteceu:

  • algumas pessoas convidadas compareceram
  • algumas pessoas convidadas não compareceram
  • e algumas pessoas compareceram mesmo sem terem sido convidadas

Como resultado, você acaba com uma segunda lista: as pessoas que compareceram à festa. Agora você tem duas listas:

  • pessoas que foram convidadas
  • pessoas que compareceram

Em termos de SQL, isso nos dá duas tabelas. Uma tabela armazena as pessoas que foram einvitedas para a festa, criada antes do evento. A segunda tabela armazena as pessoas que realmente compareceram, com base no que aconteceu na realidade. Alguns registros aparecem nas duas tabelas, outros aparecem apenas em uma. As Cláusulas JOIN em SQL nos ajudam a comparar essas tabelas e decidir quais registros queremos ver juntos no resultado.

invited

id name email
1 Alice alice@email.com
2 Bob bob@email.com
3 Carol carol@email.com
4 Dave dave@email.com

showed_up

id name arrived_at
1 Alice 2026-02-14 19:08:00
3 Carol 2026-02-14 19:22:00
5 Eve 2026-02-14 19:40:00

Alice e Carol foram convidadas e compareceram.
Bob e Dave foram convidados, mas não compareceram.
Eve apareceu sem convite.

Comparar essas duas listas fornece respostas diferentes, dependendo do que você deseja saber.

INNER JOIN: as pessoas que foram convidadas e compareceram ❤️

Um INNER JOIN é a maneira mais comum de combinar tabelas. Ele procura a “correspondência perfeita” entre suas duas listas. Em nosso cenário de festa, ele retorna apenas as pessoas que:

  1. Estavam na lista invited.
  2. E realmente compareceram.

Se alguém foi convidado, mas não compareceu (como Bob), é excluído. Se alguém compareceu, mas não estava na lista (como Eve), também é excluído. Apenas as “correspondências” sobrepostas são selecionadas.

Aqui está uma dica profissional para iniciantes: INNER JOIN é o padrão. Em bancos de dados SQL, se você simplesmente escrever JOIN, o banco de dados assume que você quer dizer INNER JOIN. É a configuração “padrão” para relações de dados porque, na maioria das vezes, queremos ver apenas os registros em que ambos os lados concordam.

Agora podemos escrever um INNER JOIN que retorne apenas os convidados que compareceram:

SELECT
  i.id,
  i.name,
  i.email,
  s.arrived_at
FROM invited AS i
INNER JOIN showed_up AS s
  ON i.id = s.id
ORDER BY s.arrived_at;

Resultado

id name email arrived_at
1 Alice alice@email.com 2026-02-14 19:08:00
3 Carol carol@email.com 2026-02-14 19:22:00

Alice e Carol aparecem porque seus id existe em ambas as tabelas. Bob e Dave são excluídos porque não compareceram. Eve é excluída porque não foi convidada, portanto não há nenhuma linha correspondente na lista de convidados.

No trabalho real, INNER JOIN responde a perguntas como:

  • Quais usuários convidados fizeram login?
  • Quais clientes fizeram um pedido?
  • Quais e-mails foram enviados e abertos?

Se não houver correspondência em ambos os lados, o registro simplesmente não aparece no resultado.

LEFT JOIN: Todos que foram convidados 💌

Um LEFT JOIN começa com a tabela invited. Isso significa que todas as pessoas convidadas aparecem no resultado — independentemente de terem comparecido ou não.

  • Se alguém compareceu, você vê os dados de presença dessa pessoa.
  • se não compareceu, as colunas da showed_up tabela contêm NULL. NULL Significa simplesmente que nenhum registro correspondente foi encontrado.

Aqui está um LEFT JOIN que mostra todos os convidados, juntamente com a hora de chegada, caso tenham comparecido:

SELECT
  i.id,
  i.name,
  i.email,
  s.arrived_at
FROM invited AS i
LEFT JOIN showed_up AS s
  ON i.id = s.id
ORDER BY i.id;

Resultado

id name email arrived_at
1 Alice alice@email.com 2026-02-14 19:08:00
2 Bob bob@email.com NULL
3 Carol carol@email.com 2026-02-14 19:22:00
4 Dave dave@email.com NULL

Bob e Dave aparecem no resultado, mesmo que não tenham comparecido. O NULL simplesmente indica que nenhuma linha correspondente foi encontrada na showed_up tabela.

Na prática, LEFT JOIN é útil quando você deseja perguntar:

  • Quem convidamos, mesmo que não tenham comparecido?
  • Quais usuários se inscreveram, mas nunca fizeram login?
  • Quais clientes nunca fizeram um pedido?

É por isso que LEFT JOIN é um dos JOINs mais usados em relatórios e análises.

Dica profissional: a junção “segura”

No mundo profissional, LEFT JOIN é frequentemente a escolha preferida para relatórios. Por quê? Porque é segura. Ela garante que você não “exclua” acidentalmente pessoas do seu relatório apenas porque elas ainda não realizaram nenhuma ação. Se você deseja uma lista de todos os clientes e seus pedidos, uma LEFT JOIN garante que mesmo os clientes que ainda não compraram nada sejam contabilizados.

RIGHT JOIN: todos que apareceram 🤷

Uma JUNÇÃO À DIREITA funciona da mesma forma que uma LEFT JOIN, mas do outro lado. Começa com a showed_up lista em vez da invited lista. Isso significa que:

  • todas as pessoas que compareceram à festa aparecem no resultado
  • se foi convidada, você vê os detalhes do convite
  • se não foi, as colunas do convite contêm NULL

Isso inclui naturalmente as pessoas que apareceram sem convite.

Aqui está uma RIGHT JOIN que mostra todos que compareceram, independentemente de terem sido convidados ou não:

SELECT
  s.id,
  i.name,
  i.email,
  s.arrived_at
FROM invited AS i
RIGHT JOIN showed_up AS s
  ON i.id = s.id
ORDER BY s.arrived_at;

Resultado

id name email arrived_at
1 Alice alice@email.com 2026-02-14 19:08:00
3 Carol carol@email.com 2026-02-14 19:22:00
5 NULL NULL 2026-02-14 19:40:00

Eve aparece no resultado, embora não tenha sido convidada. Os NULL valores nas colunas de convite significam simplesmente que não havia nenhum registro correspondente na invited tabela.

RIGHT JOIN é menos comum na prática, porque geralmente você pode reescrevê-lo como uma LEFT JOIN , trocando a ordem das tabelas. Ainda assim, entender como funciona ajuda a ler e raciocinar sobre o código SQL escrito por outras pessoas.

FULL OUTER JOIN: o relatório completo da festa 💝

Um FULL OUTER JOIN mostra tudo. Ele combina as duas tabelas e mantém todos os registros de ambos os lados, independentemente de haver correspondência ou não.

Isso significa que você vê:

  • pessoas que foram convidadas e compareceram
  • pessoas que foram convidadas, mas não compareceram
  • pessoas que compareceram sem convite

Nada é filtrado.

Aqui está um FULL OUTER JOIN que produz o relatório completo da festa:

SELECT
  i.id AS invited_id,
  i.name,
  i.email,
  s.arrived_at
FROM invited AS i
FULL OUTER JOIN showed_up AS s
  ON i.id = s.id
ORDER BY i.id, s.id;

Resultado

invited_id name email arrived_at
1 Alice alice@email.com 2026-02-14 19:08:00
2 Bob bob@email.com NULL
3 Carol carol@email.com 2026-02-14 19:22:00
4 Dave dave@email.com NULL
NULL NULL NULL 2026-02-14 19:40:00

Este resultado mostra a história completa:

  • Alice e Carol foram convidadas e compareceram
  • Bob e Dave foram convidados, mas não compareceram
  • Eve compareceu sem convite

FULL OUTER JOIN é útil quando você deseja ter uma visão completa e não quer perder nenhum registro de nenhuma das tabelas. É especialmente útil para auditorias, verificações de dados e relatórios de alto nível, onde os dados ausentes são tão importantes quanto os dados correspondentes.

Mesmos dados, perguntas diferentes

A coisa mais importante a lembrar sobre o “Cláusulas JOIN em SQL” é esta:

Os dados não mudam.
Apenas a pergunta muda.

Quando você alterna de um INNER JOIN para um LEFT JOIN ou um FULL OUTER JOIN, você não está modificando as tabelas. Você está apenas alterando as regras que determinam quais registros aparecem no conjunto de resultados.

Quando você para de pensar em JOINs como algo misterioso e começa a pensar neles como filtros aplicados a duas listas, eles se tornam muito mais fáceis de entender.

Essa mudança de perspectiva é geralmente o momento em que os JOINs finalmente fazem sentido para os iniciantes.

De convidados da festa de volta às tabelas SQL

O exemplo da festa é apenas uma maneira de tornar a lógica visível. O mesmo padrão aparece em todos os lugares no trabalho real com SQL.

Por exemplo:

  • clientes e pedidos
  • usuários e logins
  • e-mails enviados e e-mails abertos

Em todos os casos, você está trabalhando com duas listas e fazendo variações das mesmas perguntas:

  • Quem aparece nas duas listas?
  • Quem aparece apenas em um lado?
  • Quem eu quero incluir no meu resultado, mesmo que algo esteja faltando?

Cláusulas JOIN em SQL existem para responder exatamente a essas perguntas. Depois de entender como elas funcionam com uma lista de convidados simples, aplicar a mesma lógica a tabelas reais se torna muito fácil.

Conclusão: escolha a JOIN que se adapta à pergunta

No SQL, assim como no romance, não existe uma única combinação “ideal”. Existe apenas o JOIN que se encaixa na pergunta que você está fazendo.

  • Às vezes, você deseja apenas correspondências confirmadas e mútuas (INNER JOIN).
  • Às vezes, você precisa ver quem ainda não respondeu (LEFT JOIN).
  • Às vezes, você quer uma imagem completa, confusa e bonita de todos os envolvidos (FULL OUTER JOIN).

Quando você deixa de ver os JOINs como código abstrato e começa a vê-los como a lógica das relações, você descobre o verdadeiro poder dos bancos de dados relacionais.

Compreender a teoria é um ótimo primeiro encontro, mas o domínio vem com a prática. Se você deseja parar de questionar sua sintaxe e começar a escrever consultas complexas com confiança, o curso Cláusulas JOIN em SQL é o próximo passo perfeito. Você irá além da lista de convidados e trabalhará com conjuntos de dados profissionais, desenvolvendo a memória muscular necessária para uma carreira em dados.

E se você estiver pronto para um relacionamento sério e duradouro com sua carreira, o Pacote SQL Ilimitado Vitalício oferece acesso vitalício a todos os cursos que oferecemos — desde consultas básicas até análise avançada de dados. É o melhor presente para o seu futuro.

Não deixe seus dados continuarem “complicados”. Comece hoje mesmo sua jornada em direção à combinação perfeita.