No Oracle, assumindo
(USER, HOBBY)
é único, você pode usar um GROUP BY
consulta:SELECT user
FROM user_hobby
WHERE hobby IN ('piano', 'sport')
GROUP BY user
HAVING COUNT(*) = 2
Isso fará com que o Oracle execute no máximo uma única passagem de dados, enquanto o INTERSECT trataria cada consulta separadamente e, portanto, precisaria de duas passagens.