Questão nº 62
Questão de Tecnologia da Informação · FGV STN 2024 (nº 62)
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.
```sql
select
case when (not C is null or B = 15)
then 1 else 0 end x1,
case when not (not C is null or B = 15)
then 1 else 0 end y1,
case when (C = null or B <> null)
then 1 else 0 end x2,
case when not (C = null or B <> null)
then 1 else 0 end y2,
case when (C < A or C > A)
then 1 else 0 end x3,
case when not (C < A or C > A)
then 1 else 0 end y3
from exemplo
```
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 (alternativa correta)
- C0, 1, 0, 1, 0, 1
- D0, 1, 1, 0, 1, 0
- E0, 1, 1, 1, 0, 0
Resposta comentada
Gabarito Alternativa B
Em SQL, a lógica de três estados (ou três valores) significa que uma expressão lógica pode resultar em TRUE, FALSE ou UNKNOWN (desconhecido). O valor NULL representa a ausência de dados ou um valor indefinido. Qualquer comparação direta com NULL (como =, <>, >, <, etc.) resulta em UNKNOWN, exceto as operações IS NULL e IS NOT NULL, que retornam TRUE ou FALSE. Para que uma condição WHEN em um CASE seja satisfeita, ela deve ser avaliada como TRUE; se for FALSE ou UNKNOWN, o ELSE é executado.
Vamos analisar cada expressão com A=10, B=20, C=NULL:
-
x1:(not C is null or B = 15)C is nulléTRUE(NULL é nulo).not C is nulléNOT TRUE, que éFALSE.B = 15(20 = 15) éFALSE.FALSE or FALSEéFALSE.- Como a condição é
FALSE,x1recebe0.
-
y1:not (not C is null or B = 15)- A condição interna é a mesma de
x1, que resultou emFALSE. not FALSEéTRUE.- Como a condição é
TRUE,y1recebe1.
- A condição interna é a mesma de
-
x2:(C = null or B <> null)C = null(NULL = NULL) éUNKNOWN(comparação direta com NULL).B <> null(20 <> NULL) éUNKNOWN(comparação direta com NULL).UNKNOWN or UNKNOWNéUNKNOWN.- Como a condição é
UNKNOWN,x2recebe0.
-
y2:not (C = null or B <> null)- A condição interna é a mesma de
x2, que resultou emUNKNOWN. not UNKNOWNéUNKNOWN.- Como a condição é
UNKNOWN,y2recebe0.
- A condição interna é a mesma de
-
x3:(C < A or C > A)C < A(NULL < 10) éUNKNOWN.C > A(NULL > 10) éUNKNOWN.UNKNOWN or UNKNOWNéUNKNOWN.- Como a condição é
UNKNOWN,x3recebe0.
-
y3:not (C < A or C > A)- A condição interna é a mesma de
x3, que resultou emUNKNOWN. not UNKNOWNéUNKNOWN.- Como a condição é
UNKNOWN,y3recebe0.
- A condição interna é a mesma de
O resultado final é: x1=0, y1=1, x2=0, y2=0, x3=0, y3=0.
- (A) Incorreta: O valor de
y3é 0, não 1. - (B) Correta: Os valores calculados (0, 1, 0, 0, 0, 0) correspondem exatamente ao resultado da avaliação das expressões conforme a lógica de três estados do SQL.
- (C) Incorreta: Os valores de
y2ey3são 0, não 1. Armadilha: O distrator mais tentador. Ele explora a confusão comum de queNOT UNKNOWNpoderia serTRUEouFALSE, ou que comparações comoNULL = NULLouB <> NULLresultariam emTRUEouFALSEem vez deUNKNOWN. Na lógica de três estados do SQL,NOT UNKNOWNsempre resulta emUNKNOWN, e umWHENsó executa se a condição forTRUE. - (D) Incorreta: Os valores de
x2ex3são 0, não 1. - (E) Incorreta: Os valores de
x2ey2não podem ser ambos 1, pois são condições opostas (PeNOT P). Além disso,x2é 0, não 1.
Fonte: FGV STN 2024 Auditor Federal de Finanças e Controle - Tecnologia da Informação (Transformação Digital) (Caderno Tipo 1). Reproduzida para fins de estudo.