Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — FADESP 2026

Banco de DadosBanco de Dados Relacionais
Código
qg669758
Banca
FADESP
Órgão
SEFAZ-PA
Ano
2026
Nível
Superior
Cargo
Auditor Fiscal de Receitas Estaduais - Conhecimentos Gerais
Considere uma tabela chamada Livros com as colunas id (int), autor (varchar) e ano (int). Sabe-se que alguns livros não são datados, resultando em valores NULL na coluna ano. Considere o seguinte comando SQL:SELECT * FROM Livros WHERE ano <> 1854;Ao ser executado, esse comando retornará
  1. Aapenas os registros cujo ano tenha um valor numérico diferente de 1854, incluindo os registros onde o ano é NULL, pois NULL é diferente de 1854.
  2. Bapenas os registros cujo ano tenha um valor numérico diferente de 1854, excluindo os registros onde o ano é NULL.
  3. Cum erro de sintaxe, pois não é possível comparar valores numéricos com NULL usando o operador <>.
  4. Dapenas os registros cujo ano tenha um valor numérico igual a 1854 ou a 0 (zero).
  5. Eapenas os registros cujo ano tenha um valor numérico igual a 1854.
Revelar gabarito e comentário

GabaritoB — apenas os registros cujo ano tenha um valor numérico diferente de 1854, excluindo os registros onde o ano é NULL.

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: Comparação com NULL e o operador <>

Gabarito: letra B. O comando SELECT * FROM Livros WHERE ano <> 1854 retorna apenas os registros cujo ano seja um valor numérico diferente de 1854, excluindo aqueles em que ano é NULL, porque qualquer comparação com NULL usando operadores comuns (=, <>, <, etc.) resulta em UNKNOWN, e a cláusula WHERE filtra apenas as linhas onde a condição é TRUE. Essa é a lógica de três valores (TRUE, FALSE, UNKNOWN) adotada pelo padrão SQL.

A questão testa um conceito fundamental em SQL: o tratamento de valores NULL. Em bancos de dados relacionais, NULL representa "valor desconhecido" ou "ausência de valor". Ao comparar qualquer coisa com NULL, o resultado não é TRUE nem FALSE, mas sim UNKNOWN. Como a cláusula WHERE considera apenas as linhas cuja condição é TRUE, as linhas que resultam em FALSE ou UNKNOWN são descartadas. Portanto, a condição ano <> 1854 é UNKNOWN para os registros onde ano é NULL, e eles não são retornados.

Alternativa A — ❌ Incorreta

Afirma que os registros com ano NULL seriam incluídos porque "NULL é diferente de 1854". Isso é um erro conceitual: NULL não é um valor, e a comparação com <> não retorna TRUE, mas UNKNOWN. Portanto, esses registros são excluídos.

Alternativa B — ✅ Correta ⟵ GABARITO

Exclui os registros onde ano é NULL, retornando apenas aqueles com valor numérico diferente de 1854. Exato: o filtro WHERE ano <> 1854 avalia como UNKNOWN para NULL, FALSE para registros com ano = 1854, e TRUE para os demais números.

Alternativa C — ❌ Incorreta

Alega que o comando geraria erro de sintaxe. Não há erro: a sintaxe WHERE ano <> 1854 é perfeitamente válida. O que ocorre é que a comparação com NULL não retorna TRUE, mas o comando é executado normalmente.

Alternativa D — ❌ Incorreta

Diz que retornaria registros com ano = 1854 ou ano = 0. Não é o caso: a condição é <> 1854, que exclui exatamente os registros com ano = 1854 (pois a igualdade é FALSE) e não inclui condição sobre 0.

Alternativa E — ❌ Incorreta

Afirma que retornaria registros com ano = 1854. O operador <> significa "diferente de", então registros com ano = 1854 são justamente os que não são retornados.

NÃO CAIA NESSA!

A banca explora a confusão comum de candidatos que pensam que NULL é "um valor" e que, portanto, seria considerado como "diferente de 1854". Lembre-se: NULL não é um valor; qualquer comparação com NULL produz UNKNOWN, e a cláusula WHERE exige TRUE. Portanto, NULL nunca é incluído em condições com =, <>, <, > etc. Para testar NULL, use IS NULL ou IS NOT NULL.

Gabarito: letra B.

Link permanente: /questoes/qg669758