← Questões de Banco de Dados

Banco de Dados · FGV · 2022

Questão comentada de Banco de Dados

Considere que a tabela relacional T: (1) contém 100 linhas na sua instância corrente; (2) possui uma coluna A que é uma chave primária e não aceita nulos; e (3) a configuração do ambiente de consultas SQL trata valores nulos (NULL) como unknown. Nesse contexto, assinale os números mínimos e máximos, respectivamente, de linhas que seriam produzidas pela execução do comando SELECT * FROM T WHERE A = NULL UNION SELECT * FROM T WHERE A <> NULL

Gabarito: A

Em SQL, quando o ambiente trata NULL como unknown, comparações como = NULL e <> NULL não funcionam do jeito intuitivo. Isso acontece porque NULL não representa um valor concreto, e sim a ausência de valor. Então, ao comparar qualquer coisa com NULL usando operadores relacionais, o resultado tende a ser unknown, e desconhecido em um WHERE não passa no filtro. Nesta questão, a tabela T tem 100 linhas, mas isso não muda o resultado final. A primeira consulta, SELECT * FROM T WHERE A = NULL, não retorna linhas, porque A é chave primária e não aceita nulos, além de a comparação com NULL produzir unknown. A segunda, SELECT * FROM T WHERE A <> NULL, também não retorna linhas pelo mesmo motivo. Como as duas subconsultas produzem conjuntos vazios, o UNION entre elas continua vazio. O UNION elimina duplicidades, mas aqui nem há o que unir. Portanto, o número mínimo e o máximo de linhas produzidas é 0 e 0. Em termos de regra prática de prova: nunca compare NULL com = ou <> para esperar um resultado verdadeiro. Em SQL, o caminho correto para testar nulos é IS NULL ou IS NOT NULL, algo muito explorado em questões de banca, inclusive pela FGV.

Continue treinando

Questões relacionadas