Questão de Banco de Dados — Banco de Dados Relacionais — FADESP 2026
Banco de Dados›Banco 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á
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.
Bapenas os registros cujo ano tenha um valor numérico diferente de 1854, excluindo os registros onde o ano é NULL.
Cum erro de sintaxe, pois não é possível comparar valores numéricos com NULL usando o operador <>.
Dapenas os registros cujo ano tenha um valor numérico igual a 1854 ou a 0 (zero).
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.