Tratamento de NULL (COALESCE/NVL/NULLIF/IS NULL)
Oracle
-- COALESCE: returns the first non-NULL value (standard)
SELECT name, COALESCE(phone, mobile, 'none') AS contact FROM customer;
-- Oracle-specific NVL / NVL2
SELECT NVL(balance, 0) FROM customer;
SELECT NVL2(discount, 'yes', 'no') FROM orders;
-- NULLIF and IS NULL
SELECT NULLIF(a, b) FROM t; -- NULL if a=b
SELECT name FROM customer WHERE phone IS NULL;Para tratar NULL (valor desconhecido): COALESCE retorna o primeiro valor não NULL da lista (padrão, vários argumentos). O NVL(a,b) do Oracle é o equivalente de dois argumentos; NVL2 retorna valores diferentes conforme o valor seja NULL ou não. NULLIF(a,b) retorna NULL se forem iguais. Sempre teste NULL com IS NULL / IS NOT NULL (= NULL não funciona).
PostgreSQL
SELECT name, COALESCE(phone, mobile, 'none') AS contact FROM customer;
SELECT NULLIF(divisor, 0) FROM t; -- prevent division by zero
SELECT name FROM customer WHERE phone IS NULL;
-- The equivalent of Oracle NVL is COALESCEO PostgreSQL oferece COALESCE, NULLIF e IS NULL/IS NOT NULL padrão; use COALESCE em vez do NVL do Oracle. Use IS, e não =, em comparações com NULL; se dois NULLs precisarem ser tratados como iguais, o operador 'IS NOT DISTINCT FROM' resolve.
MySQL
SELECT name, COALESCE(phone, mobile, 'none') AS contact FROM customer;
-- MySQL shortcut: IFNULL (two arguments)
SELECT IFNULL(balance, 0) FROM customer;
SELECT NULLIF(a, b) FROM t;
SELECT name FROM customer WHERE phone IS NULL;O MySQL/MariaDB suportam COALESCE e NULLIF padrão; IFNULL(a,b) é um atalho de dois argumentos (semelhante ao NVL do Oracle). O operador <=> fornece igualdade segura para NULL (trata dois NULLs como iguais). NULL é testado com IS NULL / IS NOT NULL.
SQL Server
SELECT name, COALESCE(phone, mobile, 'none') AS contact FROM customer;
-- SQL Server shortcut: ISNULL (two arguments)
SELECT ISNULL(balance, 0) FROM customer;
SELECT NULLIF(a, b) FROM t;
SELECT name FROM customer WHERE phone IS NULL;O SQL Server oferece o COALESCE padrão (vários argumentos, com promoção de tipo de dado) e o ISNULL(a,b) de dois argumentos; os dois diferem em detalhes sutis (COALESCE é padrão e mais flexível quanto à precedência de tipos). NULLIF e IS NULL também são suportados. ISNULL é o equivalente ao NVL do Oracle (os nomes são parecidos).
MongoDB
// COALESCE equivalent: $ifNull
db.customer.aggregate([
{ $project: { name: 1,
contact: { $ifNull: ["$phone", "$mobile", "none"] } } }
])
// NULL / missing field check:
db.customer.find({ phone: { $in: [null] } })Na agregação do MongoDB, o equivalente ao COALESCE é o operador $ifNull (vários argumentos, retorna o primeiro que não seja null/ausente). Em uma consulta, { field: null } corresponde tanto aos documentos cujo valor é null quanto aos que não têm o campo; explicite a distinção com { field: { $type: 'null' } } ou $exists.
Redis
# Instead of NULL, Redis has the concept of 'no such key/field':
EXISTS customer:1 # does the key exist?
HGET customer:1 phone # returns nil if the field is absent
GET missing_key # (nil)O Redis não tem NULL no sentido do SQL; o equivalente é uma chave ou um campo de Hash ausente, e os comandos retornam nil nesse caso. A lógica de valor padrão (como COALESCE) é aplicada no lado da aplicação com uma verificação de nil. A existência de um campo é verificada com HEXISTS.
Elasticsearch
# Default assignment when a field is missing (missing bucket / null_value)
# Find documents without the field in a query:
GET customer/_search
{ "query": { "bool": { "must_not": { "exists": { "field": "phone" } } } } }
# Map empty values to a specific value with null_value in the mappingNo Elasticsearch, campos null ou ausentes são verificados com a consulta 'exists' (must_not exists = documentos sem o campo). Para um padrão semelhante a COALESCE, defina 'null_value' no mapping ou atribua um valor às entradas ausentes com o parâmetro 'missing' nas agregações. Valores padrão também podem ser gerados com runtime fields/scripts.