SQL Dojo Beta
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
In Randori ausprobieren

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
In Randori ausprobieren