An order is "open" if it has NOT reached a terminal state. Terminal states are 'delivered', 'cancelled', and 'refunded'.
Return every open order – INCLUDING those whose status is NULL (treat NULL as still-open, not as terminal).
Returnorder_idstatus· any row order
About this problem
You practise excluding a list of values without losing the rows where the value is missing. An order counts as open if it has not reached 'delivered', 'cancelled' or 'refunded', and the prompt says an order with a NULL status is still open. You return order_id and status for all of them. The business question is which orders still need work, and it depends on treating a missing status as a real case rather than letting it disappear.
Most people write WHERE status NOT IN ('delivered', 'cancelled', 'refunded') and stop. The result looks right: paid, shipped and pending orders appear. But the order with no status is missing, although the prompt says it is still open. For that row, NOT IN compares NULL with each value, every comparison is unknown, and the row is filtered out. The same happens with a chain of <> tests joined by AND. Nothing errors, so the gap is easy to miss unless you look for blank statuses in the source. Also notice that paid is not a terminal state in this definition, so dropping paid orders on the assumption that they are finished is a second mistake.
Read the lesson: NULL & Unknown (P02) →