Questão nº 69
Questão de Fluência em Dados · FGV Receita Federal do Brasil 2023 - Manhã (nº 69)
Os principais Sistemas Gerenciadores de Bancos de Dados oferecem total suporte à linguagem SQL. Um aspecto importante da implementação do SQL é o tratamento para valores nulos quando esses são considerados como unknown values.
Nesse contexto, considere uma tabela T com colunas A e B, que podem conter valores nulos. T possui 100 registros e, em 50% das linhas, há pelo menos uma coluna preenchida com o valor NULL.
Considere a consulta a seguir:
```sql
SELECT * FROM T t1
WHERE t1.A = NULL or t1.B = NULL
```
O número máximo de linhas de resultados que seriam retornadas pela consulta é igual a
- A0. (alternativa correta)
- B25.
- C50.
- D75.
- E100.
Resposta comentada
Gabarito Alternativa A
Em SQL, o valor NULL representa um dado ausente ou desconhecido. Ao comparar qualquer valor (inclusive outro NULL) com NULL usando operadores de comparação padrão como =, !=, <, >, o resultado da comparação não é TRUE nem FALSE, mas sim UNKNOWN (desconhecido). A cláusula WHERE de uma consulta SQL só retorna as linhas para as quais a condição avalia como TRUE.
- (A) Correta: A comparação
t1.A = NULLsempre resulta emUNKNOWN, independentemente do valor det1.A(seja eleNULLou um valor não-nulo). O mesmo ocorre parat1.B = NULL. Assim, a condição completat1.A = NULL or t1.B = NULLse tornaUNKNOWN OR UNKNOWN, que também avalia paraUNKNOWN. Como a cláusulaWHEREsó retorna linhas quando a condição éTRUE, e neste caso a condição nunca éTRUE, o número de linhas retornadas é 0. - (B) Incorreta: Esta alternativa sugere que algumas linhas seriam retornadas, o que contradiz o comportamento de
NULLem comparações com o operador=. - (C) Incorreta: Esta é a armadilha da questão. A informação de que 50% das linhas (50 registros) possuem pelo menos uma coluna
NULLinduz a pensar que essas 50 linhas seriam retornadas. No entanto, isso só aconteceria se a consulta utilizasset1.A IS NULL or t1.B IS NULL. O operador=não é a forma correta de verificar se um valor éNULLem SQL. - (D) Incorreta: Esta alternativa sugere um número arbitrário de linhas que não se alinha com a lógica de tratamento de
NULLem SQL. - (E) Incorreta: Esta alternativa sugere que todas as 100 linhas seriam retornadas, o que não é possível, pois a condição não seria
TRUEpara nenhuma delas.
Fonte: FGV Receita Federal do Brasil 2023 - Manhã Analista-Tributário da Receita Federal do Brasil (Caderno Tipo 1). Reproduzida para fins de estudo.