Entendendo valores nulos no PostgreSQL
Valores nulos geralmente são mal interpretados como um valor vazio. Entretanto os valores nulos são valores que desconhecemos ou que não são aplicáveis a determinada situação. Neste episódio demonstro o comportamento dos valores nulos em operações comuns de comparação com outros valores.
Mais informações:
- http://www.postgresql.org/docs/9.1/static/functions-comparison.html
- http://en.wikipedia.org/wiki/Null_(SQL)
Comandos:
\pset null (null)
SELECT '';
SELECT NULL;
SELECT NULL = NULL; -- NULL
SELECT NULL <> NULL; -- NULL
SELECT NULL AND NULL; -- NULL
SELECT NULL AND TRUE; -- NULL
SELECT NULL AND (1 = 1); -- NULL
SELECT 1 < NULL AND (1 = 1); -- NULL
SELECT 1 < NULL AND (1 = 2); -- FALSE
SELECT 1 < 2 AND (1 = 2); -- FALSE
SELECT 1 < 3 OR 2 < 1; -- TRUE
SELECT 1 < 3 OR NULL; -- TRUE
SELECT 1 < 0 OR NULL; -- NULL
SELECT NULL OR NULL; -- NULL
SELECT NULL AND NULL; -- NULL
SELECT 1 IS NULL; -- FALSE
SELECT '' IS NULL; -- FALSE
SELECT NULL IS NULL; -- TRUE
SELECT (1 < 0) IS NULL; -- FALSE
SELECT (1 < NULL) IS NULL; -- TRUE
SELECT (1 < NULL) IS NOT NULL; -- FALSE
SELECT (1 < 0) IS NOT NULL; -- TRUE
SELECT ROW(1,2,3) > ROW(1,2,4); -- FALSE
SELECT ROW(1,2,3) < ROW(1,2,4); -- TRUE
SELECT ROW(1,2,3) < ROW(1,2,NULL); -- NULL
SELECT ROW(1,2,3) < ROW(1,3,NULL); -- TRUE
SELECT * FROM pessoas WHERE idade < 35 OR idade IS NULL;
SELECT * FROM pessoas WHERE idade <> 60;
SELECT * FROM pessoas WHERE idade IS DISTINCT FROM 60;
SELECT NULL IS DISTINCT FROM 1; -- TRUE
SELECT NULL IS DISTINCT FROM NULL; -- FALSE
