Questa è la cosa che scrivo più spesso su questo forum... se dovessi basarmi sul forum, direi che è il pitfall più comune!

SELECT m.massimo, p.nomeProdotto
FROM Prodotto p
INNER JOIN (
SELECT MAX(valoreIndice) AS massimo
FROM Prodotto
WHERE nomeOperazione = 'Guadagno'
GROUP BY nomeOperazione
) m
ON p.valoreIndice = m.massimo;