To find rows where at least three out of four of those columns match you can use. SELECT D1.ID, D2.ID FROM DATA D1 JOIN DATA D2 ON D1.SSN = D2.SSN AND D1.ID > D2.ID AND 2 <= CASE WHEN D1.FNAME = D2.FNAME THEN 1 ELSE 0 END + CASE WHEN D1.LNAME = D2.LNAME THEN 1 ELSE 0 END + CASE WHEN D1.DOB = D2.DOB THEN 1 ELSE 0 END UNION ALL SELECT D1.ID, D2.ID FROM DATA D1 JOIN DATA D2 ON D1.DOB = D2.DOB AND D1.FNAME = D2.FNAME AND D1.LNAME = D2.LNAME AND D1.SSN <> D2.SSN AND D1.ID > D2.ID The top branch gets all rows where the `SSN` are the same and at least 2 out of the three other columns are the same. The join on `SSN` is likely to be pretty selective in itself. That just leaves one other possible three column combination left which is dealt with by the second branch. Both branches of the `UNION ALL` have an equi join so it should perform better than a join with some complicated `OR` condition.