Pular para o conteúdo principal

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

Banco de DadosSQL
Código
fg079626
Banca
FGV
Órgão
DATAPREV
Ano
2024
Nível
Superior
Cargo
ATI - Arquitetura, Engenharia e Sustentação Tecnológica
O esquema de um banco de dados relacional, especificado pelos comandos SQL a seguir, atenderá às consultas 


Q47_49.png (407×496)
Considere que todos os candidatos que responderam questões tenham suas respostas registradas na tabelaQ48.png 316×93A execução da consulta SQL especificada produz como resultado o número de inscrição e nome dos candidatos que responderam a
  1. Aalguma questão.
  2. Bexatamente uma questão.
  3. Cnenhuma questão.
  4. Dquestões corretas.
  5. Etodas as questões.
Revelar gabarito e comentário

GabaritoC — nenhuma questão.

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

Consulta SQL: candidatos que não responderam questões

Gabarito: letra C. A consulta retorna o número de inscrição e o nome dos candidatos que não responderam a nenhuma questão, pois utiliza um LEFT JOIN entre a tabela de candidatos e a tabela de respostas, filtrando com WHERE os registros em que o identificador da resposta é nulo — exatamente a técnica para encontrar registros sem correspondência em outra tabela.

Para entender a questão, é preciso dominar o conceito de junção externa (outer join) em SQL. Um LEFT JOIN (ou LEFT OUTER JOIN) retorna todos os registros da tabela à esquerda (no caso, a tabela de candidatos), combinando-os com os registros correspondentes da tabela à direita (a tabela de respostas). Quando não há correspondência, as colunas da tabela à direita vêm preenchidas com NULL. É exatamente esse comportamento que permite identificar os candidatos que não possuem nenhuma resposta registrada.

A lógica da consulta é a seguinte: ao fazer o LEFT JOIN e depois filtrar com WHERE as linhas em que a coluna da tabela de respostas é NULL, estamos selecionando apenas os candidatos que não têm nenhuma linha correspondente na tabela de respostas. Isso porque, se o candidato tivesse respondido pelo menos uma questão, haveria uma linha com o identificador da resposta preenchido, e essa linha seria excluída pelo filtro.

Vamos ilustrar com um exemplo concreto. Suponha que a tabela Candidato tenha os seguintes registros:

Inscricao

Nome

1

Ana

2

Bruno

3

Carla

E a tabela Resposta tenha:

IdResposta

Inscricao

10

1

11

1

12

3

O LEFT JOIN entre Candidato e Resposta sobre a coluna Inscricao produziria:

Inscricao

Nome

IdResposta

1

Ana

10

1

Ana

11

2

Bruno

NULL

3

Carla

12

Aplicando o filtro WHERE IdResposta IS NULL, restaria apenas a linha do Bruno, que é o candidato que não respondeu nenhuma questão. Portanto, a consulta retorna exatamente os candidatos que não responderam a nenhuma questão.

A pegadinha da banca está em confundir o LEFT JOIN com o INNER JOIN. O INNER JOIN retornaria apenas os candidatos que têm pelo menos uma resposta (Ana e Carla), o que corresponderia à alternativa A (alguma questão). Já o LEFT JOIN com o filtro de NULL é a técnica clássica para encontrar os registros sem correspondência, que é o que a alternativa C descreve.

NÃO CAIA NESSA!

A banca explora a confusão entre INNER JOIN e LEFT JOIN. O INNER JOIN retornaria os candidatos que responderam alguma questão (alternativa A), enquanto o LEFT JOIN com WHERE ... IS NULL retorna os que não responderam nenhuma (alternativa C). O candidato que não domina a diferença entre as junções marca a alternativa A, mas a consulta usa LEFT JOIN justamente para capturar os que estão sem correspondência.

Alternativa A — ❌ Incorreta

A alternativa A afirma que a consulta retorna candidatos que responderam alguma questão. Isso seria verdade se a consulta usasse um INNER JOIN (ou JOIN), que retorna apenas os registros com correspondência em ambas as tabelas. No entanto, a consulta usa LEFT JOIN e filtra com WHERE as linhas em que a coluna da tabela de respostas é NULL, o que exclui exatamente os candidatos que têm respostas. Portanto, a consulta retorna o oposto: os candidatos sem respostas.

Alternativa B — ❌ Incorreta

A alternativa B afirma que a consulta retorna candidatos que responderam exatamente uma questão. Isso exigiria uma contagem de respostas por candidato, usando GROUP BY e HAVING COUNT(*) = 1. A consulta apresentada não faz nenhuma agregação; ela apenas faz uma junção e um filtro. Portanto, não é possível que ela retorne apenas candidatos com exatamente uma resposta.

Alternativa C — ✅ Correta ⟵ GABARITO

A alternativa C está correta. A consulta usa LEFT JOIN para combinar todos os candidatos com suas respostas, e o filtro WHERE com a condição de NULL na coluna da tabela de respostas seleciona apenas os candidatos que não têm nenhuma linha correspondente. Isso significa que eles não responderam a nenhuma questão. Essa é a técnica padrão em SQL para encontrar registros sem correspondência em outra tabela.

Alternativa D — ❌ Incorreta

A alternativa D afirma que a consulta retorna candidatos que responderam questões corretas. Isso exigiria uma coluna que indicasse se a resposta está correta ou não, e um filtro adicional como WHERE Resposta.Correta = TRUE. A consulta apresentada não faz nenhuma referência a correção de respostas; ela apenas verifica a existência de respostas. Portanto, a alternativa D está incorreta.

Alternativa E — ❌ Incorreta

A alternativa E afirma que a consulta retorna candidatos que responderam todas as questões. Isso exigiria comparar o número de respostas de cada candidato com o número total de questões, usando GROUP BY, HAVING e subconsultas. A consulta apresentada não faz nenhuma agregação ou comparação com o total de questões. Portanto, a alternativa E está incorreta.

A técnica de usar LEFT JOIN com WHERE ... IS NULL é fundamental em SQL e aparece com frequência em provas de concursos. Ela é a forma mais direta de encontrar registros que não possuem correspondência em outra tabela, e é exatamente o que a questão cobra.

Gabarito: letra C

Link permanente: /questoes/fg079626