Thank you for your response Matteo.
It seems like I'm not the only one. In the mean time I found
select * from mdl_grade_grades where itemid not in (select id from mdl_grade_items)
from the tracker issue and found 2084 records on a total of 707849.
I deleted them with
DELETE from mdl_grade_grades where itemid not in (select id from mdl_grade_items)which was mentioned in the bug.
After running the delete query all was working fine again and I managed to delete the 400 users.
I think your suggested code change would have worked too, but I preferred in this case to clean up the database - it might prevent future problems.