Common de-duping problem. Part of the issue is that you need to identify which records you want to KEEP, then delete everything else. To do that, you have to correlate your subselect so that the ID's of the records you want to keep are excluded from your outside select. One way to do this could look like:
select *
from dbo.students a
where studid not in
(
select min(studId)
from dbo.students b
where b.firstname = a.firstname
and b.lastname = a.lastname
) This snippet assumes you want to keep the first (lowest number?) ID in the table. You can of course select the last one (highest number?) by changing the min() to max().
Hope this helps!