Another way to get the result would be to use Intersect and then combine it with Except. The distinct part is handled implicitly.
--===== Find Customers that bought both "A" AND "B"
SELECT CustomerID
FROM #Purchase
WHERE ProductCode IN ('A')
INTERSECT
SELECT CustomerID
FROM #Purchase
WHERE ProductCode IN ('B')
EXCEPT
--===== Find Customers that bought "C".
SELECT CustomerID
FROM #Purchase
WHERE ProductCode IN ('C')
;