Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FUNDATEC 2025

Banco de DadosSQL
Código
qg475073
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2025
Nível
Superior
Cargo
Analista em Computação/Ênfase em Suporte em Banco de Dados
No SGBD Microsoft SQL Server 2019, existem as seguintes tabelas:Imagem associada para resolução da questãoFoi executada uma query SQL que retornou o seguinte resultado, onde null representa uma célula vazia:Imagem associada para resolução da questãoQual a query correta que retornaria o resultado acima?
  1. Aselect * from a LEFT OUTER JOIN b on a.a = b.b;
  2. Bselect * from a RIGHT OUTER JOIN b on a.a = b.b;
  3. Cselect * from a INNER JOIN b on a.a = b.b;
  4. Dselect * from a FULL OUTER JOIN b on a.a = b.b;
  5. Eselect * from a FULL INNER JOIN b on a.a = b.b;
Revelar gabarito e comentário

GabaritoB — select * from a RIGHT OUTER JOIN b on a.a = b.b;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Junções SQL: LEFT, RIGHT, INNER e FULL OUTER JOIN

Gabarito: letra B. A query que retorna o resultado apresentado é select * from a RIGHT OUTER JOIN b on a.a = b.b;, pois o RIGHT OUTER JOIN preserva todas as linhas da tabela da direita (b) e, para as linhas sem correspondência na tabela da esquerda (a), preenche os campos de a com NULL. O resultado da imagem mostra exatamente isso: todas as linhas de b aparecem, e as linhas de a que não têm par em b ficam com NULL nas colunas de b.

As junções (JOINs) em SQL são operações que combinam linhas de duas tabelas com base em uma condição de correspondência. A diferença crucial entre elas está em quais linhas são preservadas quando não há correspondência. O INNER JOIN retorna apenas as linhas que têm correspondência em ambas as tabelas. O LEFT OUTER JOIN preserva todas as linhas da tabela da esquerda, preenchendo com NULL os campos da direita quando não há par. O RIGHT OUTER JOIN faz o oposto: preserva todas as linhas da tabela da direita, preenchendo com NULL os campos da esquerda. O FULL OUTER JOIN preserva todas as linhas de ambas as tabelas, preenchendo com NULL os campos da tabela que não tem correspondência.

Para entender qual join foi usado, é preciso observar o resultado retornado. Se o resultado contém todas as linhas da tabela b (mesmo aquelas sem correspondência em a), e as linhas de a sem par em b aparecem com NULL nas colunas de b, então é um RIGHT OUTER JOIN. Se o resultado contivesse todas as linhas de a (mesmo sem par em b), seria um LEFT OUTER JOIN. Se contivesse apenas as linhas com correspondência, seria um INNER JOIN. Se contivesse todas as linhas de ambas, seria um FULL OUTER JOIN.

Vamos supor um exemplo concreto: tabela a com coluna a contendo (1, 2, 3) e tabela b com coluna b contendo (2, 3, 4). O INNER JOIN retornaria (2, 2) e (3, 3). O LEFT JOIN retornaria (1, NULL), (2, 2), (3, 3). O RIGHT JOIN retornaria (2, 2), (3, 3), (NULL, 4). O FULL JOIN retornaria (1, NULL), (2, 2), (3, 3), (NULL, 4).

A pegadinha desta questão está em identificar corretamente qual tabela é a "esquerda" e qual é a "direita" na sintaxe. No comando select * from a RIGHT OUTER JOIN b, a tabela a é a esquerda e b é a direita. O RIGHT JOIN preserva as linhas de b. Se o candidato confundir a ordem, pode pensar que é um LEFT JOIN. Além disso, a alternativa E (FULL INNER JOIN) não existe na sintaxe SQL padrão — é uma pegadinha clássica.

NÃO CAIA NESSA!

A banca explora a confusão entre LEFT e RIGHT JOIN. No comando from a RIGHT OUTER JOIN b, a tabela da direita é b, e é ela que tem todas as linhas preservadas. Se você inverter a leitura, acha que é LEFT JOIN. Lembre-se: o RIGHT JOIN preserva a tabela que vem DEPOIS do comando JOIN.

1INNER JOIN
Só linhas com correspondência
Sem NULL
2LEFT OUTER JOIN
Preserva todas as linhas da esquerda
NULL na direita sem par
3RIGHT OUTER JOIN
Preserva todas as linhas da direita
NULL na esquerda sem par
4FULL OUTER JOIN
Preserva todas de ambas
NULL onde não há par
JOINs SQL
LEVELsoulevel.com.br
JOINs SQL: INNER JOIN (Só linhas com correspondência, Sem NULL); LEFT OUTER JOIN (Preserva todas as linhas da esquerda, NULL na direita sem par); RIGHT OUTER JOIN (Preserva todas as linhas da direita, NULL na esquerda sem par); FULL OUTER JOIN (Preserva todas de ambas, NULL onde não há par)

Alternativa A — ❌ Incorreta

select * from a LEFT OUTER JOIN b on a.a = b.b; retornaria todas as linhas da tabela a (esquerda), preenchendo com NULL os campos de b quando não houver correspondência. O resultado da imagem mostra que todas as linhas de b estão presentes, inclusive aquelas sem par em a — o que caracteriza um RIGHT JOIN, não um LEFT JOIN.

Alternativa B — ✅ Correta ⟵ GABARITO

select * from a RIGHT OUTER JOIN b on a.a = b.b; preserva todas as linhas da tabela b (direita). As linhas de a que não têm correspondência em b aparecem com NULL nas colunas de b. O resultado da imagem mostra exatamente esse comportamento: todas as linhas de b estão lá, e as linhas de a sem par em b têm NULL nas colunas de b. É a única query que produz o resultado apresentado.

Alternativa C — ❌ Incorreta

select * from a INNER JOIN b on a.a = b.b; retornaria apenas as linhas que têm correspondência em ambas as tabelas. Linhas sem par em qualquer uma das tabelas seriam descartadas. O resultado da imagem contém linhas com NULL, o que não ocorre em um INNER JOIN.

Alternativa D — ❌ Incorreta

select * from a FULL OUTER JOIN b on a.a = b.b; retornaria todas as linhas de ambas as tabelas, preenchendo com NULL os campos da tabela que não tem correspondência. O resultado da imagem não mostra linhas de a sem correspondência em b (que apareceriam com NULL nas colunas de b), então não é um FULL JOIN.

Alternativa E — ❌ Incorreta

FULL INNER JOIN não é uma sintaxe válida em SQL. O correto seria FULL OUTER JOIN ou INNER JOIN. A banca criou essa alternativa para testar se o candidato conhece a sintaxe correta dos joins.

Gabarito: letra B

Link permanente: /questoes/qg475073