>>
if condition evaluates true , function should return false value
Yes, that first row evaluates to "true" and gence, it should be false and NOT appear in your output:
http://www.dba-oracle.com/t_lnnvl.htmI reproduced your condition and got different results:
CODE
create table tes1
(
myname varchar2(10),
sub_mark number,
prac_mark number);
insert into tes1 values ('sam', 120, 70);
insert into tes1 values ('sona', 70, 90);
select *
from tes1
where
lnnvl(sub_mark > prac_mark);
For me, the first rows DOES NOT appear.