No dejes de compartir nuestra página y códigos en tus redes sociales, necesitamos tu ayuda para hacer crecer esta comunidad.
Solución:
PostgreSQL distingue entre lo vacío string y NULL (a diferencia de varchar en Oracle). Comparando cualquier cosa con, o llamando a cualquier función (a menos que CALL ON NULL INPUT esté configurado en la función), un valor NULL devuelve NULL.
Su primera comparación será NULL si pcc.mac es NULL, pero su segunda consulta devuelve true como el vacío string no es igual a ‘SIMONE.GISELIA’
> select '' <> 'TEST';
?column?
----------
t
(1 row)
> select btrim(upper(NULL)) <> 'TEST';
?column?
----------
(null)
(1 row)
NULL no es un valor de verdad, es por eso que su expresión CASE se evalúa como 2.
> SELECT CASE WHEN NULL <> 'test' THEN 1 ELSE 2 END;
case
------
2
(1 row)
Time: 0.285 ms
> SELECT CASE WHEN '' <> 'test' THEN 1 ELSE 2 END;
case
------
1
(1 row)
Puede usar la función coalesce para devolver otro valor cuando un valor es NULL; probablemente tenga sentido que te unas al vacío string en tu consulta:
> SELECT coalesce(NULL, '') <> 'TEST';
?column?
----------
t
(1 row)
los IS DISTINCT FROM
el operador también hace lo que necesita: trata NULL
como cualquier otro valor para las comparaciones:
> SELECT NULL IS DISTINCT FROM 'SOMETHING';
?column?
----------
t
(1 row)