Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2024

Banco de DadosSQL
Código
fg077282
Banca
FGV
Órgão
CVM
Ano
2024
Nível
Superior
Cargo
Analista - Perfil 7 - Ciência de Dados - Tarde
Observe o script SQL a seguir.Imagem associada para resolução da questãoPara analisar quais auditores estão realizando auditoria em quais auditados, é necessária a execução de uma consulta SQL que apresente o seguinte resultado:Imagem associada para resolução da questãoPara obter o resultado apresentado, deve-se executar a consulta SQL:
  1. AImagem associada para resolução da questão
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DImagem associada para resolução da questão
  5. EImagem associada para resolução da questão
Revelar gabarito e comentário

GabaritoC — [imagem]

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”.

SQL: junção de tabelas para relacionar auditores e auditados

Gabarito: letra C. Para relacionar auditores e auditados, a consulta deve usar um INNER JOIN (ou JOIN) entre as tabelas, combinando as linhas que possuem valores correspondentes nas colunas de relacionamento. O INNER JOIN retorna apenas os registros que têm correspondência em ambas as tabelas, que é exatamente o que o resultado esperado apresenta.

O INNER JOIN é a operação de junção mais comum em SQL. Ela combina linhas de duas ou mais tabelas com base em uma condição de igualdade entre colunas relacionadas. O resultado contém apenas as linhas que satisfazem a condição de junção, ou seja, a interseção entre as tabelas. No contexto da questão, precisamos relacionar a tabela de auditores com a tabela de auditados, provavelmente através de uma tabela intermediária que armazena as auditorias realizadas. A consulta deve unir essas tabelas usando as chaves estrangeiras apropriadas.

A sintaxe básica do INNER JOIN é:

SELECT colunas
FROM tabela1
INNER JOIN tabela2 ON tabela1.coluna = tabela2.coluna;

A cláusula ON especifica a condição de junção, que geralmente é a igualdade entre a chave primária de uma tabela e a chave estrangeira da outra. No caso de uma relação muitos-para-muitos entre auditores e auditados, seria necessário incluir uma terceira tabela (a tabela de associação) no JOIN.

É importante distinguir o INNER JOIN dos outros tipos de junção:

  • LEFT JOIN (ou LEFT OUTER JOIN): retorna todas as linhas da tabela à esquerda, mesmo que não haja correspondência na tabela à direita. As colunas da tabela à direita ficam com NULL quando não há correspondência.

  • RIGHT JOIN (ou RIGHT OUTER JOIN): retorna todas as linhas da tabela à direita, mesmo que não haja correspondência na tabela à esquerda.

  • FULL OUTER JOIN: retorna todas as linhas de ambas as tabelas, preenchendo com NULL onde não há correspondência.

A pegadinha da banca está em confundir o INNER JOIN com os OUTER JOINs. Se a questão pedisse para listar todos os auditores, mesmo aqueles que não realizaram auditoria, o LEFT JOIN seria o correto. Mas como o resultado esperado mostra apenas os pares de auditores e auditados que têm uma auditoria registrada, o INNER JOIN é a escolha certa.

Guarde a diferença: INNER JOIN = interseção (só o que tem par); OUTER JOIN = preserva linhas sem par. É exatamente essa distinção que separa as alternativas.

Critério

INNER JOIN (gabarito)

LEFT/RIGHT JOIN

FULL OUTER JOIN

CROSS JOIN

Linhas retornadas

Apenas pares com correspondência nas duas tabelas

Todas da tabela preservada + correspondências da outra

Todas de ambas as tabelas

Produto cartesiano (todas as combinações possíveis)

Valores NULL

Nunca gera NULL

Gera NULL nas colunas da tabela não preservada

Gera NULL onde não há correspondência

Não gera NULL, mas combinações sem sentido

Adequação ao resultado esperado

✅ Exatamente o que a questão pede (só pares com auditoria)

❌ Incluiria auditores/auditados sem auditoria

❌ Incluiria registros sem par

❌ Geraria combinações irreais em excesso

Sintaxe típica

FROM a INNER JOIN b ON a.id = b.id

FROM a LEFT JOIN b ON a.id = b.id

FROM a FULL OUTER JOIN b ON a.id = b.id

FROM a CROSS JOIN b

Alternativa A — ❌ Incorreta

Esta alternativa provavelmente usa um LEFT JOIN ou um RIGHT JOIN, que retornaria também auditores ou auditados sem correspondência, incluindo linhas com valores NULL. O resultado esperado não contém esses registros, então essa junção não produziria o resultado correto.

Alternativa B — ❌ Incorreta

Esta alternativa pode usar um FULL OUTER JOIN, que retorna todas as linhas de ambas as tabelas, incluindo aquelas sem correspondência. Isso adicionaria registros com NULL que não aparecem no resultado esperado, tornando a consulta incorreta.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta alternativa usa o INNER JOIN (ou JOIN), que retorna apenas as linhas com correspondência em ambas as tabelas. Isso produz exatamente o resultado esperado: apenas os pares de auditores e auditados que possuem uma auditoria registrada.

Alternativa D — ❌ Incorreta

Esta alternativa provavelmente usa um CROSS JOIN, que retorna o produto cartesiano das duas tabelas, combinando cada linha de uma tabela com todas as linhas da outra. Isso geraria um número muito maior de registros do que o esperado, incluindo combinações sem sentido.

Alternativa E — ❌ Incorreta

Esta alternativa pode usar um LEFT JOIN com a condição invertida, ou um RIGHT JOIN, que também incluiria linhas sem correspondência. O resultado conteria registros com NULL que não estão no resultado esperado.

NÃO CAIA NESSA!

A banca explora a confusão entre INNER JOIN e OUTER JOIN. O candidato pode ser tentado a usar LEFT JOIN para "não perder" auditores, mas o resultado esperado mostra apenas os pares com auditoria registrada. Lembre-se: INNER JOIN = interseção; OUTER JOIN = preserva linhas sem par.

PEGA ESSA DICA!

Para identificar o tipo de junção correto, observe o resultado esperado. Se ele contém apenas registros com correspondência em ambas as tabelas, use INNER JOIN. Se contém registros de uma tabela sem correspondência na outra, use LEFT JOIN ou RIGHT JOIN. Se contém todos os registros de ambas, use FULL OUTER JOIN.

Gabarito: letra C

Link permanente: /questoes/fg077282