LNNVL é uma função integrada do oracle que retorna TRUE para condições avaliadas como FALSE ou UNKNOWN e retorna FALSE para condições avaliadas como TRUE. Minha pergunta é qual seria o benefício de retornar o oposto da condição de verdade, em vez de apenas manipular os valores NULL?
Por exemplo, suponha que você tenha uma tabela Emp com as colunas StartCommission e CurrentCommission que podem conter nulos. O seguinte retorna apenas linhas com nenhum valor nulo:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission;
Se você deseja incluir linhas em que qualquer comissão é nula, você pode fazer algo assim:
SELECT * FROM Emp WHERE StartCommission = CurrentCommission
OR StartCommission IS NULL OR CurrentCommission IS NULL;
Parece que existiria uma função para reduzir essa sintaxe, mas o uso de LNNVL retorna todos os registros diferentes e todos os registros com valores nulos.
SELECT * FROM Emp WHERE LNNVL(StartCommission = CurrentCommission);
A adição de NOT a isso retorna apenas linhas sem nulos. Parece-me que a funcionalidade desejada para este caso seria manter verdadeiras condições verdadeiras, falsas condições falsas e avaliar condições verdadeiras como verdadeiras. Eu realmente criei um caso de uso baixo aqui? É realmente mais provável querer transformar desconhecido em verdadeiro, verdadeiro em falso e falso em verdadeiro?
create table emp (StartCommission Number(3,2), CurrentCommission Number(3,2));
insert into emp values (null,null);
insert into emp values (null,.1);
insert into emp values (.2,null);
insert into emp values (.3,.4);