There are several ways to do this. Fortunately you at least have a primary key.
Be smart and backup the database before attempting.
Here's an example solution using a CTE:
Create the test tables and populate:
CREATE TABLE PassportTest(
Id int not null
,Name varchar(25) not null
,IdentityNo1 char(5) null
,IdentityNo2 char(5) null
,PassportNo char(5) null
)
INSERT PassportTest (Id, Name, IdentityNo1, IdentityNo2, PassportNo)
SELECT 1, 'John', 'E6788', 'A9383' , null
UNION ALL
SELECT 2, 'James', null, null, 'E8364'
UNION ALL
SELECT 3, 'John', 'E6788', 'A9383' , null
UNION ALL
SELECT 4, 'John', 'E6788', 'A9383' , null
UNION ALL
SELECT 5, 'James', null, null, 'E8364';
Now delete the dupes:
;WITH Keepers as (
SELECT MAX(Id) Id
,Name
,IdentityNo1
,IdentityNo2
,PassportNo
FROM PassportTest
GROUP BY Name
,IdentityNo1
,IdentityNo2
,PassportNo
)
DELETE FROM PassportTest
WHERE Id NOT IN (
SELECT Id FROM Keepers
);