Falle
Soft Delete und NULL
WHERE NOT is_deleted entfernt auch die Zeilen, in denen das Flag NULL ist.NOT NULL ist NULL, und WHERE behält nur wahre Zeilen. Wenn ein Löschflag leer sein kann (eine später hinzugefügte
Spalte, ein altes System), schreiben Sie WHERE is_deleted IS NOT TRUE, oder besser, machen Sie es einmal im Staging zu
einem echten Boolean: COALESCE(is_deleted, false) AS is_deleted.
Die Falle
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 |
Die Korrektur
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 |