Quando o valor NULL é considerado como unknow (desconhecido) pelo gerenciador de bancos de dados relacionais, as expressões lógicas do SQL podem resultar nos valores True, False e Unkown. Nesse contexto, analise as expressões abaixo, onde esses três valores lógicos são representados por “T”, “F” e “?” respectivamente. F or ? T or ? ? or ? ? and ? T and ? Assinale, na ordem dada, os valores resultantes em cada expressão.
- A)?, ?, ?, ?, T
Errada, porque T AND ? não gera T: com NULL como Unknown, o resultado é Unknown.
- B)?, T, ?, ?, ?
Certa, pois aplica corretamente as regras do OR e do AND na lógica ternária do SQL.
- C)?, T, ?, ?, T
Errada, porque T AND ? não é T, e sim Unknown.
- D)?, T, T, ?, T
Errada, porque ? or ? não pode virar T sem que exista pelo menos um operando verdadeiro.
- E)T, T, ?, T, T
Errada, porque F OR ? não gera T, já que o Unknown não transforma uma disjunção em verdadeiro.
Gabarito: B
No SQL, o NULL não significa zero nem vazio: ele representa um valor desconhecido, e isso muda a lógica da comparação. Quando o SGBD trata NULL como Unknown, surge a lógica ternária, com três resultados possíveis: True, False e Unknown. É por isso que expressões com NULL não se comportam como na lógica clássica, e você precisa pensar com calma antes de marcar qualquer coisa no impulso. Na operação OR, basta um lado ser True para o resultado ser True. Se nenhum lado for True e aparecer Unknown, o resultado tende a ficar Unknown. Assim, F OR ? vira ?, T OR ? vira T, e ? OR ? também vira ?. Na operação AND, basta um lado ser False para o resultado ser False. Mas se não houver False e entrar Unknown, o resultado fica Unknown. Por isso, ? AND ? resulta em ?, e T AND ? também resulta em ?. Logo, a sequência correta é: ?, T, ?, ?, ?. É exatamente o que aparece na alternativa B. Esse comportamento é o clássico da lógica trivalorada do SQL, cobrada com frequência em prova porque muita gente tenta aplicar a lógica binária tradicional e tropeça no NULL.