Pular para o conteúdo principal

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

Banco de DadosSQL
Código
fg068145
Banca
FGV
Órgão
SEDUC-SP
Ano
2023
Nível
Superior
Cargo
Professor de Ensino Fundamental e Médio (Educação Profissional) - Eixo 5 - Informação e Comunicação
Gerenciadores de bancos de dados relacionais usualmente empregam a lógica de três estados quando há operações de comparação envolvendo valores nulos (NULL). Nesse contexto, considere o comando SQL a seguir.delete from Twhere exists (select * from T T2 where T.A=T2.A)Nesse contexto, é correto afirmar que
  1. Anenhuma linha de T será excluída, independentemente do conteúdo da coluna A.
  2. Btodas as linhas de T que contêm valores não nulos na coluna A serão excluídas.
  3. Ctodas as linhas de T que contêm valores nulos na coluna A serão excluídas.
  4. Dtodas as linhas de T serão excluídas, independentemente do conteúdo da coluna A.
  5. Eo comando contém um erro, pois o a sintaxe do SQL não permite a autorreferência na cláusula exists.
Revelar gabarito e comentário

GabaritoB — todas as linhas de T que contêm valores não nulos na coluna A serão excluídas.

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

Lógica de três estados e valores NULL no SQL

Gabarito: letra B. O comando DELETE com EXISTS e subconsulta correlacionada exclui todas as linhas de T cujo valor da coluna A não é nulo, pois a comparação T.A = T2.A retorna TRUE quando ambos os valores são iguais e não nulos (e cada linha se iguala a si mesma), enquanto retorna UNKNOWN quando pelo menos um dos operandos é NULL, fazendo com que o EXISTS seja falso para essas linhas. A lógica de três estados (TRUE, FALSE, UNKNOWN) impede que linhas com NULL sejam incluídas no resultado da subconsulta.

A banca testa o conhecimento sobre como o SQL trata NULL em comparações e o comportamento do EXISTS. O comando é perfeitamente válido (autorreferência é permitida) e a exclusão depende do conteúdo da coluna A.

Análise das alternativas

Alternativa A — ❌ Incorreta

Afirma que nenhuma linha será excluída. Na verdade, linhas com valores não nulos na coluna A serão excluídas, pois a auto-comparação T.A = T2.A para o mesmo registro é TRUE (já que o valor não nulo é igual a ele mesmo). Portanto, o EXISTS é verdadeiro e a exclusão ocorre.

Alternativa B — ✅ Correta ⟵ GABARITO

O comportamento descrito é exato. Linhas com A não nulo atendem à condição de igualdade na subconsulta (inclusive com a própria linha), fazendo o EXISTS retornar TRUE. Já linhas com A nulo não geram correspondência, pois NULL = NULL resulta em UNKNOWN, que é tratado como falso no contexto do EXISTS. Portanto, apenas as linhas com valores não nulos são excluídas.

Alternativa C — ❌ Incorreta

Inverte o resultado: linhas com NULL em A não são excluídas. A comparação entre nulos produz UNKNOWN, e o EXISTS só retorna verdadeiro se a subconsulta retornar ao menos uma linha – o que não ocorre para NULL.

Alternativa D — ❌ Incorreta

Generaliza indevidamente. Linhas com NULL permanecem na tabela. A exclusão não é total.

Alternativa E — ❌ Incorreta

A sintaxe é perfeitamente válida. A autorreferência em subconsulta correlacionada é um recurso padrão do SQL (desde que a tabela receba um alias diferente, como T2). Não há erro de sintaxe.

NÃO CAIA NESSA!

O candidato pode achar que NULL = NULL é TRUE (como em algumas linguagens de programação), mas no SQL a comparação resulta em UNKNOWN, fazendo o EXISTS falhar para linhas nulas. O comando não exclui todas as linhas – apenas as que têm valores definidos.

Gabarito: letra B.

Link permanente: /questoes/fg068145