DoH. I can use exists and 'not exists'. I guess that's the better option.
SELECT person, category, item, Qty FROM Sales
UNION
SELECT person, category, item, 0 AS Qty FROM POSS
WHERE EXISTS
-- Only return the people and categories which have sales
(SELECT S.person from Sales S WHERE S.person = POSS.person AND S.category = POSS.category)
AND NOT EXISTS
-- Do not return rows which already exist in Sales
(SELECT S.person from Sales S WHERE S.person = POSS.person AND S.category = POSS.category AND S.item = POSS.item)