Utilizando o Microsoft SQL Server 2008 R2, com a criação dos...

Próximas questões
Com base no mesmo assunto
Q3653972 Banco de Dados
Utilizando o Microsoft SQL Server 2008 R2, com a criação dos scripts anteriores. Qual será o resultado após a execução do SQL abaixo?

SELECT p.Cliente, s.Nome AS Sanduiche, p.Quantidade
FROM Pedidos p
RIGHT JOIN Sanduiches s ON p.IdSanduiche = s.IdSanduiche
ORDER BY s.Nome;

Selecione a alternativa CORRETA.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: A

Tema central: interpretação de JOIN externos no SQL Server, em especial o RIGHT OUTER JOIN, e seus efeitos sobre linhas preservadas e valores NULL.

Resumo teórico: Em um INNER JOIN, aparecem apenas linhas que têm correspondência nas duas tabelas. Em um OUTER JOIN, todas as linhas da “tabela preservada” aparecem, e as colunas da outra tabela vêm como NULL quando não houver correspondência. No RIGHT JOIN, a tabela à direita de JOIN é a preservada. Logo, todas as linhas de Sanduiches aparecem; se não existir pedido correspondente, as colunas de Pedidos (Cliente, Quantidade) ficam NULL. O ORDER BY apenas ordena o resultado, não altera o conjunto retornado.

Fontes: Microsoft Docs – FROM (Transact‑SQL) e tipos de JOIN no SQL Server (RIGHT/LEFT/OUTER). Ver “JOIN fundamentals” na documentação oficial da Microsoft.

Por que a alternativa A é correta: O comando usa RIGHT JOIN Sanduiches s, logo a tabela Sanduiches é a preservada. A seleção retorna p.Cliente, s.Nome e p.Quantidade. Para sanduíches sem pedido, p.Cliente e p.Quantidade serão NULL. Portanto, “todos os sanduíches aparecem, mesmo sem pedido, com NULL para cliente” descreve corretamente o resultado.

Análise das alternativas incorretas:

B) “Somente pedidos sem sanduíche definido aparecem.” Incorreto. O RIGHT JOIN preserva Sanduiches, não “pedidos sem sanduíche”. Para mostrar apenas linhas sem correspondência, seria necessário um filtro como WHERE p.IdSanduiche IS NULL após um LEFT JOIN invertendo a ordem das tabelas, o que não ocorre.

C) “Gera erro por usar RIGHT JOIN.” Falso. RIGHT OUTER JOIN é sintaxe T‑SQL suportada no SQL Server 2008 R2 e versões posteriores. Não há erro sintático nisso.

D) “Apenas os sanduíches que foram pedidos aparecem.” Isso descreve um INNER JOIN (ou um RIGHT JOIN com filtro eliminando NULLs de Pedidos), o que não é o caso. O comando preserva todos os sanduíches, tenham ou não pedidos.

Estratégias para a prova:

• Identifique a tabela preservada: no RIGHT JOIN, é a tabela à direita do JOIN. No LEFT JOIN, é a da esquerda.

• Reescreva mentalmente: RIGHT JOIN (A RIGHT JOIN B) ≡ LEFT JOIN invertendo a ordem (B LEFT JOIN A). Isso ajuda a prever onde surgirão NULLs.

• Verifique as colunas selecionadas: as da tabela não preservada poderão vir NULL quando não houver correspondência.

• Não caia na pegadinha “gera erro”: RIGHT/LEFT OUTER JOIN são plenamente suportados.

Gostou do comentário? Deixe sua avaliação aqui embaixo!

Clique para visualizar este gabarito

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