• You need to eliminate hash join and Index scan.

    With this query you can do that using INTERSECT AND EXCEPT

    SELECT CustomerID

    FROM #Purchase

    WHERE ProductCode = 'A'

    INTERSECT

    SELECT CustomerID

    FROM #Purchase

    WHERE ProductCode = 'B'

    EXCEPT

    SELECT CustomerID

    FROM #Purchase

    WHERE ProductCode = 'C'

    Or, this one using CTE AND JOINS:

    ;WITH CTE AS

    (

    SELECT CustomerID

    FROM #Purchase

    WHERE ProductCode = 'A'

    GROUP BY CustomerID

    )

    ,CTE2 AS

    (

    SELECT CustomerID

    FROM #Purchase

    WHERE ProductCode = 'B'

    GROUP BY CustomerID

    )

    ,CTE3 AS

    (

    SELECT CustomerID

    FROM #Purchase

    WHERE ProductCode = 'C'

    GROUP BY CustomerID

    )

    select CTE.CustomerID from CTE

    left join CTE3 ON

    CTE.CustomerID = CTE3.CustomerID

    where CTE.CustomerID in (SELECT CustomerID FROM CTE2)

    AND CTE3.CustomerID IS NULL

    GROUP BY CTE.CustomerID