NOT IN expands to a chain of not-equal comparisons joined by AND. Any comparison with NULL is UNKNOWN, and AND with UNKNOWN is never TRUE, so the WHERE keeps no row.
SELECT name FROM customers WHERE id NOT IN ( SELECT customer_id FROM orders ) ORDER BY name;
SELECT name FROM customers c WHERE NOT EXISTS ( SELECT 1 FROM orders o WHERE o.customer_id = c.id ) ORDER BY name;
0 rows, no error — the 'customers we've never converted' report says there are none.
Use NOT EXISTS (NULL-safe), or filter the NULLs out of the subquery with WHERE key IS NOT NULL.
WHERE NOT EXISTS (SELECT 1 FROM t WHERE t.key = base.key)