Estou lidando com valores anuláveis em uma coluna de uma tabela, estou me perguntando por que isso:
with cte as (
select 'c1'::text as c1,null::text as c2
union
select 'c2'::text as c1,null::text as c2
)
select *
from cte
where c2 is null
retorna um conjunto de resultados com as duas "linhas" com valor nulo em c2; comparando com esta consulta:
with cte as (
select 'c1'::text as c1,null::text as c2
union
select 'c2'::text as c1,null::text as c2
)
select *
from cte
where c2 = null
que retorna um conjunto de resultados vazio!!
então parece que field is null
é realmente diferente de field = null
? a questão é ... existe "operador compatível com nulo" para usar? para que eu possa escrever a comparação como: column_name = $1
e o argumento $1
pode ser um valor não nulo ou nulo. IF $1
é um valor nulo, então será semanticamente igual a escrever como IS NULL
, ELSE (se $1
não for um valor nulo), então seria semanticamente igual a = $1
.
PD: Esta pergunta também se aplica ao caso is NOT NULL
versus<> NULL