Voltar para a lista de artigos Artigos
12 minutos de leitura

RIGHT JOIN em SQL: Tutorial para iniciantes

Aprenda o RIGHT JOIN, um comando crucial para qualquer especialista em SQL. Nosso artigo detalha essa técnica essencial, ajudando os iniciantes a navegar e aplicar o RIGHT JOIN em suas consultas de banco de dados sem esforço.

No SQL, o RIGHT JOIN (também conhecido como RIGHT OUTER JOIN) é crucial para o manuseio eficaz dos dados. Este artigo é um guia amigável para iniciantes sobre o SQL RIGHT JOIN, uma técnica essencial para mesclar diferentes tabelas de dados. Vamos orientá-lo sobre as especificidades da RIGHT JOIN, explicando como ela se diferencia de outros tipos de junção no gerenciamento de dados. Junte-se a nós para descobrir como o RIGHT JOIN no SQL pode aprimorar suas habilidades de gerenciamento de dados.

Para solidificar seu conhecimento sobre junções, inclusive RIGHT JOIN, o curso Cláusulas JOIN em SQL em LearnSQL.com.br é altamente recomendado. Esse curso interativo foi desenvolvido para equipar os iniciantes com habilidades essenciais de SQL, garantindo que eles possam lidar com cenários reais de banco de dados de forma eficaz.

Entendendo JOINS em SQL

No SQL, uma junção é um recurso fundamental que combina dados de duas tabelas com base em uma coluna correspondente. É essencial para tarefas em que as informações são armazenadas em tabelas diferentes e precisam ser visualizadas em conjunto. Por exemplo, se você tiver uma tabela com detalhes de funcionários e outra com dados de departamentos, uma união pode ajudá-lo a ver qual funcionário pertence a qual departamento.

Entre os vários tipos de junções, RIGHT JOIN é uma técnica fundamental. Talvez não seja tão comumente usada como INNER JOIN, mas é vital para uma compreensão abrangente do SQL.

Apresentando nossos dados de exemplo

A tabela Restaurants (Restaurantes)

RestaurantIDNameOpeningYear
1Galactic Diner2018
2The Enchanted Fork2020
3Cove Café2019
4The Mystic Pizzeria2024

Essa tabela lista vários restaurantes e o ano em que foram inaugurados. Notavelmente, "The Mystic Pizzeria" é um restaurante recém-inaugurado sem classificações ainda.

A tabela de classificações

RatingIDRestaurantIDRatingReviewer
114.8Alice
224.3Bob
314.9Charlie
434.0Dana
524.2Erin
615.0Frank
714.7Georgia

Esta tabela mostra as classificações dadas pelos clientes. As classificações estão vinculadas aos restaurantes pelo ID do restaurante.

INNER JOIN vs. RIGHT JOIN em SQL

Nesta seção, exploraremos as principais diferenças entre RIGHT JOIN e INNER JOIN, dois tipos importantes de junções no SQL.

INNER JOIN

INNER JOIN é o tipo mais comum de junção. É usado para combinar linhas de duas tabelas. Ele retorna somente as linhas em que há um valor correspondente em ambas as tabelas. Se uma linha em uma tabela não tiver uma correspondência na outra tabela, ela não aparecerá no conjunto de resultados.

Vamos aplicar um INNER JOIN ao nosso conjunto de dados de exemplo. Queremos descobrir as classificações que cada restaurante recebeu.

SELECT 
  Restaurants.Name, 
  Restaurants.OpeningYear, 
  Ratings.Rating, 
  Ratings.Reviewer
FROM Restaurants
INNER JOIN Ratings 
ON Restaurants.RestaurantID = Ratings.RestaurantID;

Essa consulta une a tabela Restaurants com a tabela Ratings com base em sua coluna comum RestaurantID. Na cláusula FROM, listamos a primeira tabela. Em seguida, usamos a palavra-chave INNER JOIN, seguida da cláusula ON e da condição de união. A condição de união determina como combinamos as informações das duas tabelas: nesse caso, as linhas devem ter o mesmo ID de restaurante.

Aqui está o resultado da consulta:

RatingIDRestaurantIDRatingReviewer
114.8Alice
224.3Bob
314.9Charlie
434.0Dana
524.2Erin
615.0Frank
714.7Georgia

Nesse resultado, cada entrada da tabela Restaurants que tem uma classificação correspondente na tabela Ratings é exibida. Notavelmente, "The Mystic Pizzeria" está ausente do resultado. Apesar de estar listada na tabela Restaurants ela não tem entradas correspondentes na tabela Ratings tabela; ela é excluída dos resultados. Isso exemplifica a natureza seletiva do site INNER JOIN, que se concentra na interseção de dados entre duas tabelas.

RIGHT JOIN (RIGHT OUTER JOIN)

RIGHT JOINtambém conhecida como RIGHT OUTER JOIN, retorna todas as linhas da tabela da direita (listadas após JOIN), juntamente com as linhas correspondentes da tabela da esquerda (listadas após FROM). Se não houver correspondência, o conjunto de resultados ainda incluirá a linha da tabela da direita. No entanto, as informações ausentes da tabela da esquerda serão mostradas como NULL.

Um RIGHT JOIN pode retornar mais linhas do que um INNER JOIN se houver linhas na tabela da direita que não tenham correspondências na tabela da esquerda.

Sintaxe de RIGHT JOIN

A sintaxe básica de um RIGHT JOIN em SQL é a seguinte:

SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

Aqui, table1 e table2 são as duas tabelas que você está unindo. A cláusula ON especifica a condição na qual as tabelas devem ser unidas. Normalmente, é uma igualdade entre as duas colunas selecionadas.

Um exemplo básico de RIGHT JOIN

Para ilustrar isso, vamos considerar um cenário em que queremos listar todos os restaurantes e as classificações que eles possam ter. Queremos garantir que todos os restaurantes sejam incluídos no resultado da consulta, independentemente de terem sido classificados ou não. Esse é um caso de uso perfeito para RIGHT JOIN, já que nosso objetivo é reter todos os registros da tabela Restaurants da tabela.

SELECT 
  Restaurants.Name, 
  Restaurants.OpeningYear, 
  Ratings.Rating, 
  Ratings.Reviewer
FROM Ratings
RIGHT JOIN Restaurants 
ON Ratings.RestaurantID = Restaurants.RestaurantID;

Aqui estão os resultados:

NameOpeningYearRatingReviewer
Galactic Diner20184.8Alice
The Enchanted Fork20204.3Bob
Galactic Diner20184.9Charlie
Cove Café20194.0Dana
The Enchanted Fork20204.2Erin
Galactic Diner20185.0Frank
Galactic Diner20184.7Georgia
The Mystic Pizzeria2024NULLNULL

Como funciona o RIGHT JOIN

Logicamente, um RIGHT JOIN funciona examinando primeiro todas as linhas da tabela correta, que no nosso exemplo é a tabela Restaurants tabela. Para cada linha dessa tabela, ele tenta encontrar uma linha correspondente na tabela da esquerda (Ratings), com base na expressão de igualdade definida na cláusula ON.

  • Linhas correspondentes: Para cada restaurante que tenha recebido pelo menos uma classificação, a consulta combina os detalhes do restaurante com os detalhes da classificação. Isso inclui restaurantes como "Galactic Diner" e "Cove Café", que têm entradas correspondentes na cláusula Ratings
  • Linhas não correspondentes: "The Mystic Pizzeria" ainda não recebeu nenhuma classificação, mas a consulta ainda o inclui no resultado. No entanto, como não há classificações correspondentes, as colunas Rating e Reviewer desse restaurante são preenchidas com NULL. Isso significa que RIGHT JOIN é particularmente valioso quando o objetivo é preservar uma visão completa dos registros de uma tabela, independentemente da existência de registros correspondentes na outra tabela.

A principal diferença entre RIGHT JOIN e INNER JOIN

A principal diferença entre esses dois métodos está na forma como eles lidam com as linhas não correspondentes:

  • INNER JOIN exclui as linhas que não têm correspondência em ambas as tabelas.
  • RIGHT JOIN inclui todas as linhas da tabela da direita, independentemente de haver uma correspondência na tabela da esquerda. Ele preenche todos os valores ausentes com NULLs.

Entender essa distinção é fundamental para decidir que tipo de união usar com base nos requisitos de recuperação de dados de sua consulta.

RIGHT JOIN vs. LEFT JOIN

O conceito de RIGHT JOIN é mais fácil de entender quando você compreende sua relação com LEFT JOIN. Essencialmente, RIGHT JOIN e LEFT JOIN são dois lados da mesma moeda. Enquanto o LEFT JOIN retorna todas as linhas da tabela da esquerda e as linhas correspondentes da tabela da direita, o RIGHT JOIN faz o oposto. Ele retorna todas as linhas da tabela da direita e as linhas correspondentes da tabela da esquerda.

Na sintaxe SQL, mudar uma consulta de RIGHT JOIN para LEFT JOIN (ou vice-versa) é tão simples quanto inverter a ordem das tabelas na união e mudar o tipo de união. Essa natureza dupla os torna funcionalmente semelhantes, mas com foco em tabelas diferentes na operação de união.

A consulta do exemplo anterior também poderia ser escrita com LEFT JOIN:

SELECT 
  Restaurants.Name, 
  Restaurants.OpeningYear, 
  Ratings.Rating, 
  Ratings.Reviewer
FROM Restaurants 
LEFT JOIN Ratings
ON Ratings.RestaurantID = Restaurants.RestaurantID;

Alteramos RIGHT JOIN para LEFT JOIN. Também alteramos a ordem das tabelas. A consulta retorna o mesmo resultado do nosso exemplo RIGHT JOIN.

Por que LEFT JOIN é mais comum

Na prática, LEFT JOIN é usado com mais frequência do que RIGHT JOIN. Essa preferência se deve, em grande parte, à forma como as pessoas pensam e estruturam naturalmente suas consultas SQL. Normalmente, os usuários de SQL começam com uma tabela primária (a tabela da esquerda em um LEFT JOIN) e, em seguida, trazem dados adicionais de outras tabelas conforme necessário.

Como a ordem de leitura da esquerda para a direita se alinha à forma como as consultas são geralmente conceituadas e escritas, o LEFT JOIN parece mais intuitivo. Isso não faz com que o RIGHT JOIN seja menos importante; ele é apenas menos usado devido ao fluxo natural do desenvolvimento de consultas SQL.

Quando usar RIGHT JOIN

Embora menos comum, o RIGHT JOIN tem seu lugar. Ele é particularmente útil em cenários em que seu ponto de partida são os dados secundários (a tabela da direita) e você está procurando incluir ou investigar seu relacionamento com os dados primários (a tabela da esquerda). Understanding both LEFT and RIGHT JOINs adiciona flexibilidade às suas habilidades de consulta SQL, permitindo que você aborde problemas de dados de diferentes ângulos.

Exemplos e explicações de RIGHT JOIN

Usando o Restaurants e Ratings vamos alternar as tabelas para fornecer exemplos que explicam o resultado do RIGHT JOIN, com foco na inclusão de todos os restaurantes, tenham eles classificações ou não.

Exemplo 1: Restaurantes com uma classificação média acima de 4,5

Queremos listar todos os restaurantes que têm uma classificação média acima de 4,5. Queremos incluir suas classificações (se disponíveis).

SELECT 
  Restaurants.Name, 
  AVG(Ratings.Rating) AS AverageRating
FROM Restaurants
RIGHT JOIN Ratings 
ON Restaurants.RestaurantID = Ratings.RestaurantID
GROUP BY Restaurants.Name
HAVING AVG(Ratings.Rating) > 4.5;

Como funciona

  • Essa consulta associa a tabela Ratings com a tabela Restaurants usando um RIGHT JOIN.
  • Ela calcula a classificação média de cada restaurante usando o parâmetro AVG()
  • Ela filtra para incluir apenas restaurantes com uma classificação média maior que 4,5. Ela usa a cláusula HAVING para isso, que é aplicada aos resultados agregados.

Resultado

NameAverageRating
Galactic Diner4.85

Explicação

O "Galactic Diner" é o único restaurante com média de avaliações acima de 4,5. O segundo restaurante com a maior avaliação é o "The Enchanted Fork"; como sua avaliação média é de 4,25, ele não é mostrado no resultado final.

Exemplo 2: Restaurantes sem classificações

Objetivo: Listar todos os restaurantes que não receberam nenhuma avaliação.

Consulta SQL

SELECT 
  Restaurants.Name, 
  Restaurants.OpeningYear
FROM Ratings
RIGHT JOIN Restaurants 
ON Ratings.RestaurantID = Restaurants.RestaurantID
WHERE Ratings.Rating IS NULL;

Como funciona

  • Essa consulta usa o endereço RIGHT JOIN para garantir que todos os restaurantes sejam incluídos, mesmo aqueles sem entradas correspondentes na lista de classificação. Ratings
  • Ela filtra os restaurantes sem nenhuma classificação verificando NULL no campo Ratings

Resultado

NameOpeningYear
The Mystic Pizzeria2024

Explicação

"The Mystic Pizzeria" aparece sozinho aqui, pois é o único que não foi classificado. Talvez esse seja um restaurante novo que ainda não tenha recebido nenhuma avaliação. Esse exemplo mostra a eficácia do RIGHT JOIN na inclusão de restaurantes, independentemente de suas classificações.

Exemplo 3: O restaurante com mais avaliações

Objetivo: Identificar o(s) restaurante(s) com o maior número de avaliações como um indicador de popularidade.

Consulta SQL

SELECT 
  Restaurants.Name, 
  COUNT(Ratings.RatingID) AS NumberOfRatings
FROM Ratings
RIGHT JOIN Restaurants 
ON Ratings.RestaurantID = Restaurants.RestaurantID
GROUP BY Restaurants.Name
ORDER BY NumberOfRatings DESC
LIMIT 1;

Como funciona

  • Ao executar um RIGHT JOIN, a consulta conta as classificações de cada restaurante, garantindo que todos os restaurantes sejam considerados.
  • Ela ordena os resultados para destacar o restaurante com o maior número de classificações.

Resultado

NameNumberOfRatings
Galactic Diner5

Explicação

O "Galactic Diner" aparece como o restaurante mais avaliado, indicando sua popularidade. Esse cenário usa o site RIGHT JOIN para retornar todos os restaurantes e, em seguida, aproveita as funções agregadas para deduzir o restaurante mais avaliado.

Dicas práticas para RIGHT JOINs eficazes

Por fim, compartilharemos dicas práticas para ajudá-lo a usar efetivamente RIGHT JOINs em SQL.

Entendendo a ordem das tabelas

  • Foco na tabela certa: Em um RIGHT JOIN, o foco está na tabela certa. A tabela correta é aquela que será totalmente representada nos resultados. Certifique-se de que a tabela cujos dados você deseja reter inteiramente, independentemente de qualquer correspondência na outra tabela, seja colocada no lado direito da união.
  • Visualização dos dados: Antes de escrever sua consulta, visualize ou faça um esboço das tabelas e de seus relacionamentos. Isso pode ajudá-lo a identificar claramente qual tabela deve estar à direita.

Como lidar com valores NULL

  • Esperar NULLs: Em um RIGHT JOIN, as linhas da tabela da direita sem linhas correspondentes na tabela da esquerda resultarão em valores NULL nas colunas da tabela da esquerda. Esteja preparado para lidar com esses valores NULL em sua consulta, filtrando-os ou usando-os em sua análise.

Combinação de RIGHT JOIN com outras cláusulas

  • Usando Agregados e GROUP BY: As funções de agregação e GROUP BY podem ser usadas com eficácia com RIGHT JOINs para resumir dados - por exemplo, encontrar restaurantes com uma classificação média de 4,5 ou mais, conforme mostrado no Exemplo 1.
  • Filtre com cuidado: Ao usar as cláusulas WHERE com RIGHT JOINs, lembre-se de que os filtros na tabela da esquerda podem excluir linhas, reduzindo a eficácia do RIGHT JOIN. Os filtros na tabela da direita excluirão as linhas da tabela da direita; eles também podem afetar as linhas correspondentes da tabela da esquerda. Isso foi ilustrado no Exemplo 2, a consulta que mostra restaurantes sem classificações.

Como evitar erros comuns com RIGHT JOIN

  • Não confunda com LEFT JOIN: Tenha cuidado para não confundir a lógica de LEFT JOIN com RIGHT JOIN. Embora sejam semelhantes, sua aplicação e seus resultados podem ser significativamente diferentes devido à ordem das tabelas.
  • Verifique se há produtos cartesianos não intencionais: Tenha cuidado com produtos cartesianos não intencionais, nos quais você acaba com um conjunto de resultados muito maior do que o pretendido. Isso pode ocorrer se a condição de união for especificada incorretamente ou omitida.

Indo além com RIGHT JOINs

A melhor maneira de se familiarizar com o site RIGHT JOIN é praticar. Comece examinando nosso curso interativo Cláusulas JOIN em SQL curso interativo. Ele contém mais de 90 exercícios práticos para praticar todos os tipos importantes de Cláusulas JOIN em SQL que são amplamente usados no SQL, inclusive RIGHT JOIN.

Você também pode baixar nossa folha de dicasCláusulas JOIN em SQL . Esse é um guia de referência prático para comandos SQL comuns, inclusive RIGHT JOIN. É útil quando você precisa se lembrar rapidamente da sintaxe e das práticas recomendadas, e pode ajudar significativamente no uso do Cláusulas JOIN em SQL ao escrever consultas.

Leia nossos artigos sobre como praticar Cláusulas JOIN em SQL e Junções de SQL: 12 perguntas práticas com respostas detalhadas.

Se você realmente deseja desenvolver suas habilidades em SQL, experimente nosso plano Ilimitado Vitalício . Ele lhe dá acesso a todos os nossos cursos de SQL atuais e futuros. Todo mês publicamos um novo curso prático de SQL. Temos cursos para todos os níveis de proficiência em SQL e nos quatro dialetos SQL mais populares.

Continue aprendendo e explorando para liberar todo o potencial do SQL em seus esforços de análise de dados!