Hola,
las recomendaciones que has recibido son correctas y son las que típicamente he visto implementadas. Pero si como he entendido, estas usando SQL Server 2005, la solución adecuada debería emplear CTE y la función ROW_NUMBER sin necesidad de emplear tablas temporales.
La consulta a usar debería quedar como
Código:
WITH DropDups AS (
SELECT ROW_NUMBER() OVER(PARTITION BY Email, Opcion ORDER BY (SELECT 1) ) AS Dup
FROM Votos
)
DELETE DropDups
WHERE Dup > 1