SQL Dojo Beta
Trampa

Borrado lógico y NULL

WHERE NOT is_deleted también descarta las filas en las que el indicador es NULL.

NOT NULL es NULL, y WHERE solo conserva las filas verdaderas. Cuando un indicador de borrado puede estar vacío (una columna añadida después, un sistema antiguo), escriba WHERE is_deleted IS NOT TRUE o, mejor, conviértalo una vez en un booleano real en staging: COALESCE(is_deleted, false) AS is_deleted.

La trampa

WITH products(sku, is_deleted) AS (VALUES ('A', false), ('B', true), ('C', NULL))
SELECT sku FROM products WHERE NOT is_deleted ORDER BY sku;
sku
A
Probarlo en Randori

La corrección

WITH products(sku, is_deleted) AS (VALUES ('A', false), ('B', true), ('C', NULL))
SELECT sku FROM products WHERE is_deleted IS NOT TRUE ORDER BY sku;
sku
A
C
Probarlo en Randori