Em um sistema, o engenheiro precisa consultar todos os CLIEN...

Próximas questões
Com base no mesmo assunto
Q3882837 Banco de Dados
Em um sistema, o engenheiro precisa consultar todos os CLIENTES e, se houver, os PEDIDOS que cada um fez. Clientes sem pedidos também devem ser listados.
Assinale a opção que identifica o tipo de junção SQL que garante que todas as linhas da tabela da esquerda (CLIENTE) sejam incluídas no resultado, independentemente de haver correspondência na tabela da direita (PEDIDO).
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: D

Fundamento decisivo: A indicação de CLIENTE como tabela da esquerda e a exigência de listar também os clientes sem pedidos determinam a preservação das linhas da esquerda.

Tema central: Junções SQL
Análise das alternativas
A
Errada
INNER JOIN retorna apenas as linhas que têm correspondência entre as tabelas. Por isso, não atende à exigência de listar clientes sem pedidos.
B
Errada
RIGHT JOIN preserva todas as linhas da tabela da direita, não da esquerda. O enunciado exige preservação de CLIENTE, que foi explicitamente colocado à esquerda.
C
Errada
FULL OUTER JOIN preserva linhas de ambas as tabelas, inclusive sem correspondência dos dois lados. A questão, porém, pede a identificação da junção que preserva especificamente todas as linhas da esquerda; essa descrição clássica é a de LEFT OUTER JOIN.
D
Certa
A alternativa D está certa porque LEFT OUTER JOIN inclui todas as linhas da tabela da esquerda e mantém os dados da direita quando houver correspondência.
E
Errada
CROSS JOIN produz produto cartesiano entre as tabelas, sem depender de correspondência relacional. Isso não corresponde à lógica de retornar clientes com seus pedidos, incluindo ausência de pedido.
Pegadinha da questão
A armadilha era confundir a preservação da tabela da esquerda com RIGHT JOIN ou FULL OUTER JOIN.
Dica para questões semelhantes
  • Se o enunciado disser que todas as linhas da tabela da esquerda devem aparecer, pense em LEFT OUTER JOIN.
  • Se a exigência incluir registros sem correspondência, elimine INNER JOIN.
  • Diferencie preservar a esquerda de preservar ambos os lados: isso separa LEFT OUTER JOIN de FULL OUTER JOIN.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Gabarito (D)

O Left Join, cujo funcionamento tem como resultado todos os registros que estão na tabela A (mesmo que não constam na tabela B) e os registros da tabela B que são comuns à tabela A.

Sintaxe

SELECT a.Nome, b.Nome

FROM TabelaA as A

LEFT JOIN TabelaB as B

        on a.Nome = b.Nome

A) O Inner Join é o método de particular mais conhecido e que retorna os registros que são comuns às duas tabelas.

B) Usando o Right Join, conforme mostrado na Figura 6 , teremos como resultado todos os registros que estão na tabela B (mesmo que não constam na tabela A) e os registros da tabela A que são comuns à tabela B.

C) O Outer Join (também conhecido por Full Outer Join ou Full Join), tem como resultado todos os registros que estão na tabela A e todos os registros da tabela B.

D) Gabarito

E)O CROSS JOIN produz um conjunto de resultados que é o número de linhas na primeira tabela multiplicado pelo número de linhas na segunda tabela se nenhuma cláusula WHERE for usada junto com CROSS JOIN. Esse tipo de resultado é chamado de Produto Cartesiano.

Se a cláusula WHERE for usada com CROSS JOIN, ela funcionará como um INNER JOIN.

Fontes: https://www.devmedia.com.br/sql-join-entenda-como-funciona-o-retorno-dos-dados/31006

https://learnsql.com.br/blog/o-que-e-um-left-outer-join-no-sql-uma-explicacao-com-4-exemplos/

https://cursos.alura.com.br/forum/topico-exemplo-de-uso-cross-join-195444

  • A ❌ INNER JOIN → só quem tem correspondência
  • B ❌ RIGHT JOIN → prioriza tabela da direita
  • C ❌ FULL OUTER JOIN → traz tudo de ambos os lados
  • D ✅ LEFT OUTER JOIN → traz todos da esquerda
  • E ❌ CROSS JOIN → combina tudo com tudo 

Um LEFT OUTER JOIN (ou simplesmente LEFT JOIN) retorna todos os registros da tabela da esquerda, independentemente de haver correspondência na tabela da direita. Se não houver correspondência, ele preenche as colunas da tabela da direita com valores . [, , , ]

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo