SQL Dojo Bêta
Piège

Suppression logique et NULL

WHERE NOT is_deleted retire aussi les lignes où l'indicateur vaut NULL.

NOT NULL vaut NULL, et WHERE ne garde que les lignes vraies. Quand un indicateur de suppression peut être vide (une colonne ajoutée plus tard, un ancien système), écrivez WHERE is_deleted IS NOT TRUE, ou mieux, transformez-le une fois en vrai booléen au staging : COALESCE(is_deleted, false) AS is_deleted.

Le piège

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
L’essayer en Randori

La correction

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
L’essayer en Randori