Postgres - Cuidado comparação de inteiro com null

Updated . Posted . Visible to the public.

Esperaria-se true para esta consulta:

SELECT null != 1234;

Esperaria-se false para esta consulta:

SELECT NULL = 1234;

Assustados saber que ambos resultam em NULL !!!

Portanto, cuidado em comparações! Pois uma consulta como a abaixo pode não apresentar o resultado esperado se um dos DADO's for NULL

SELECT
    *
FROM
    OBJETO1, OBJETO2
WHERE
    OBJETO1.DADO != OBJETO2.DADO

A forma apropriada para fazer comparações com NULL é usando o IS DISTINCT FROM

SELECT NULL IS DISTINCT FROM 2511; -- Retorna TRUE
SELECT NULL IS NOT DISTINCT FROM 2511; -- Retorna FALSE

Fontes:

Wiki Postgres Show archive.org snapshot

Stack Overflow Show archive.org snapshot

Bruno Vieira
Last edit
Fred Policarpo
Posted by Bruno Vieira to ZeroGlosa (2015-10-02 12:28)