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
Considere que todos os candidatos que responderam questões tenham suas respostas registradas na tabelaA execução da consulta SQL especificada produz como resultado o número de inscrição e nome dos candidatos que responderam a
Aalguma questão.
Bexatamente uma questão.
Cnenhuma questão.
Dquestões corretas.
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.