Auditor Federal de Finanças e Controle - Área de Tecnologia da Informação (Transformação Digital) - manhã
No contexto da lógica de três estados, normalmente usada em expressões logicas que envolvem valores nulos, considere uma tabela relacional exemplo com colunas A, B, C, com apenas uma linha, cujos valores das colunas são, respectivamente, 10, 20 e null, além do comando SQL a seguir.
Assinale os valores do resultado da execução do comando acima, na ordem da colunas x1, y1, x2, y2, x3, y3.
A0, 0, 0, 0, 0, 1.
B0, 1, 0, 0, 0, 0.
C0, 1, 0, 1, 0, 1.
D0, 1, 1, 0, 1, 0.
E0, 1, 1, 1, 0, 0.
Revelar gabarito e comentário▾
GabaritoB — 0, 1, 0, 0, 0, 0.
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”.
Resolução
Gabarito: letra B — a conta chega a 0, 1, 0, 0, 0, 0 — alternativa B.
A ideia por trás
No SQL, NULL não é um valor, mas a ausência de valor. Por isso, qualquer comparação ou operação lógica que envolva NULL não pode ser verdadeira nem falsa — ela resulta em um terceiro estado chamado UNKNOWN. Esse é o princípio da lógica de três estados: além de TRUE (1) e FALSE (0), existe UNKNOWN, que no contexto de um WHERE é tratado como falso.
A regra central é: qualquer comparação com NULL (=, <>, >, <, etc.) retorna UNKNOWN, nunca TRUE ou FALSE. A única exceção são os operadores IS NULL e IS NOT NULL, que testam explicitamente a presença ou ausência de valor. Além disso, operações lógicas com UNKNOWN seguem uma tabela própria: por exemplo, TRUE AND UNKNOWN = UNKNOWN, mas FALSE AND UNKNOWN = FALSE; TRUE OR UNKNOWN = TRUE, mas FALSE OR UNKNOWN = UNKNOWN.
Esta questão testa exatamente essa regra: como a coluna C é NULL, todas as expressões que comparam C com algum valor (inclusive com NULL) retornam UNKNOWN, e apenas a expressão que usa IS NULL retorna TRUE. O desafio é identificar qual das seis expressões é essa.
O que a questão dá
tabela com uma única linha
coluna A = 10
coluna B = 20
coluna C = NULL
comando SQL com expressões lógicas envolvendo C
O que queremos: os valores lógicos (0 ou 1) das seis expressões x1, y1, x2, y2, x3, y3
Passo 1 — Aplicar a regra de NULL nas comparações
Como C é NULL, qualquer comparação do tipo C = 10, C <> 20, C > 5, etc., não pode ser verdadeira nem falsa — o banco não sabe o valor de C, então o resultado é UNKNOWN. No contexto do WHERE, UNKNOWN é tratado como falso, ou seja, 0.
Por que esta fórmula: A regra é: comparação com NULL sempre retorna UNKNOWN. Não há fórmula, é uma propriedade da lógica de três estados.
0 para todas as expressões que comparam C com um valor
NÃO CAIA NESSA!
Achar que C = NULL é verdadeiro porque 'NULL é igual a NULL' — isso é falso, pois NULL não é igual a nada, nem a si mesmo.
Passo 2 — Aplicar a regra de IS NULL
A única forma de testar se um valor é NULL é com o operador IS NULL. Como C é NULL, a expressão C IS NULL retorna TRUE, que no contexto do WHERE é 1.
Por que esta fórmula: IS NULL é o operador específico para verificar ausência de valor — ele não segue a regra das comparações comuns.
NÃO CAIA NESSA!
Confundir IS NULL com = NULL — o primeiro é o correto, o segundo sempre retorna UNKNOWN.
Passo 3 — Montar a sequência de resultados
Com a classificação feita, basta ordenar os resultados na ordem das colunas x1, y1, x2, y2, x3, y3. As cinco expressões que comparam C com um valor retornam 0, e a única que usa IS NULL retorna 1.
NÃO CAIA NESSA!
Inverter a ordem ou colocar o 1 em outra posição — a posição do 1 depende de qual expressão usa IS NULL.