← Questões de Banco de Dados

Banco de Dados · FGV · 2023

Questão comentada de Banco de Dados

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: 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

Gabarito: A

Em SQL, NULL nao significa zero, string vazia ou “campo em branco”: ele representa um valor desconhecido ou inexistente. Por isso, comparacoes do tipo = NULL nao funcionam como muita gente imagina. Quando voce escreve t1.A = NULL ou t1.B = NULL, o resultado nao e verdadeiro nem falso, e sim desconhecido (UNKNOWN). E, no WHERE, so passam as linhas em que a condicao e verdadeira. Se a condicao nao e verdadeira, a linha fica de fora. Na pratica, isso derruba a consulta inteira. Mesmo que a tabela tenha varias linhas com valores nulos, a expressao usada no enunciado esta errada para testar NULL. O jeito correto e usar IS NULL ou IS NOT NULL, porque SQL trata NULL de forma especial. Esse comportamento decorre da logica ternaria do SQL, prevista no padrao da linguagem e adotada pelos principais SGBDs. Assim, a consulta SELECT * FROM T t1 WHERE t1.A = NULL or t1.B = NULL nao retorna nenhuma linha. Como ambas as comparacoes sao desconhecidas, o OR tambem nao chega a verdadeiro. Logo, o numero maximo de linhas de resultado e 0, que corresponde ao gabarito A.

Continue treinando

Questões relacionadas