Questão nº 62

Questão de Tecnologia da Informação · FGV STN 2024 (nº 62)

FGV2024Auditor Federal de Finanças e Controle - Tecnologia da Informação (Transformação Digital)Tecnologia da Informação
Gabarito: Bver comentário ↓

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.

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:

  1. 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, x1 recebe 0.
  2. y1: not (not C is null or B = 15)

    • A condição interna é a mesma de x1, que resultou em FALSE.
    • not FALSE é TRUE.
    • Como a condição é TRUE, y1 recebe 1.
  3. 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, x2 recebe 0.
  4. y2: not (C = null or B <> null)

    • A condição interna é a mesma de x2, que resultou em UNKNOWN.
    • not UNKNOWN é UNKNOWN.
    • Como a condição é UNKNOWN, y2 recebe 0.
  5. 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, x3 recebe 0.
  6. y3: not (C < A or C > A)

    • A condição interna é a mesma de x3, que resultou em UNKNOWN.
    • not UNKNOWN é UNKNOWN.
    • Como a condição é UNKNOWN, y3 recebe 0.

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 y2 e y3 são 0, não 1. Armadilha: O distrator mais tentador. Ele explora a confusão comum de que NOT UNKNOWN poderia ser TRUE ou FALSE, ou que comparações como NULL = NULL ou B <> NULL resultariam em TRUE ou FALSE em vez de UNKNOWN. Na lógica de três estados do SQL, NOT UNKNOWN sempre resulta em UNKNOWN, e um WHEN só executa se a condição for TRUE.
  • (D) Incorreta: Os valores de x2 e x3 são 0, não 1.
  • (E) Incorreta: Os valores de x2 e y2 não podem ser ambos 1, pois são condições opostas (P e NOT 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.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho