Check Presence and Range Separately
NOT NULL requires a value to be present. CHECK requires its condition to be true or unknown, so CHECK (price >= 0) rejects negative values but still permits NULL. A required nonnegative price therefore needs both NOT NULL and CHECK.
What does CHECK (qty > 0) do when qty is NULL?