En Oracle, asumiendo (USER, HOBBY)
es único, podría usar un GROUP BY
consulta:
SELECT user
FROM user_hobby
WHERE hobby IN ('piano', 'sport')
GROUP BY user
HAVING COUNT(*) = 2
Esto hará que Oracle realice como máximo una sola pasada de datos, mientras que INTERSECT trataría cada consulta por separado y, por lo tanto, necesitaría dos pasadas.