Postgres - Cuidado comparação de inteiro com null

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 Over 8 years ago