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 |
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 |
Pratiquer :Supprimé, ou juste NULL ?