I believe you meant to say...partition it by ProductName and delete all the records greater than rownum 1.
You probably missed to add the Partition By in the Over clause. Yes, this is great too and less code.
DELETE D FROM
(SELECT ProductName, ROW_NUMBER()OVER(PARTITION BY ProductName ORDER BY ProductName) AS RowNum
FROM dbo.T1) D
where RowNum > 1