Questão de Banco de Dados — SQL — FGV 2022
- Código
- fg051453
- Banca
- FGV
- Órgão
- SEAD-AP
- Ano
- 2022
- Nível
- Superior
- Cargo
- Perito Criminal - Ciência da Computação - Analista de Sistema
- A0 e 0.
- B0 e 1.
- C1 e 1.
- D0 e 100.
- E1 e 100.
GabaritoA — 0 e 0.
Gabarito: letra A. A consulta SELECT * FROM T WHERE A = NULL retorna 0 linhas, pois qualquer comparação com NULL usando = ou <> resulta em UNKNOWN, e o WHERE exige TRUE. O mesmo ocorre com A <> NULL. Como ambas as partes do UNION retornam vazio, o resultado total é 0 linhas, independentemente de haver 100 linhas na tabela. Portanto, os números mínimos e máximos são ambos 0.
A banca testa o conhecimento de que NULL não é um valor, mas a ausência de valor. Em SQL, a lógica de três estados (TRUE, FALSE, UNKNOWN) faz com que comparações diretas com NULL nunca sejam verdadeiras. Para testar NULL, usa-se IS NULL ou IS NOT NULL.
Conforme explicado, ambas as condições filtram 0 linhas, logo o UNION também resulta em 0 linhas. O mínimo e máximo coincidem em 0.
Sugere máximo de 1 linha. Isso ocorreria apenas se uma das partes retornasse 1 linha, o que não é o caso, pois a comparação com NULL nunca é TRUE.
Afirma que o resultado é exatamente 1 linha. Isso seria possível se a tabela tivesse exatamente uma linha com A não nulo que satizfizesse a condição, mas nenhuma condição é satisfeita.
Considera que o UNION eliminaria duplicatas e poderia retornar até 100 linhas. Ignora que as consultas individuais retornam zero linhas.
Máximo de 100 linhas, mas novamente as consultas individuais retornam zero.
Em provas de SQL, ao ver = NULL ou <> NULL, lembre-se: a condição sempre resulta em UNKNOWN, portanto nunca retorna linhas. Use IS NULL e IS NOT NULL para testar nulos. Essa é uma pegadinha clássica.
Gabarito: letra A
Link permanente: /questoes/fg051453