There are lots of ways to do this, but there is no magic bullet. There are a lot of possibilities to ID potential duplicates, but without some rules there is no way to determine that it is indeed a match. The trick is not to identify a single function or query, but to come up with a utility and application that allows a lot of different queries or algorithms to ID potential matches, and then allows the user to quickly choose the correct ones and make fixes.
So my first question is what do you do after IDing a duplicate? Do you combine all data into a single record? Do you delete all duplicate entries and leave a single record? If you are going to do maintenance, then IDing the duplicates in only half the battle.
So this is how I do it.
1) Clean up my data by first searching and replacing.
Examples
I would replace all Inc, Inc. with Incorporated
Co. Co with Company
Lmtd LTD with Limited
etc.
2) Now I would build a lots of different types of queries that return a record and its possible dublicates. The reason for this is that it provides flexibility. There is no single query that can return all of the possibilities.
One would obviously be where the name is equal
One would be where the name is part of a Name
Example
SELECT A.CompanyName, B.CompanyName
FROM Suppliers2 AS A, Suppliers2 AS B
WHERE (((A.CompanyName) Like "*" & .[CompanyName] & "*" And (A.CompanyName)<>.[CompanyName]));
Maybe a join on multiple fields besides name (Address, Phone, etc)
A query that looks for abbreviations. Match NWA with North West Airlines.
A query using a soundex function
3)Now I would personally use recordsets and read through all of my queries and populate a table. I would read each of my records and then record in my table each possible duplicate and the rule used (query name) to find it.
My table would have these fields
Company_PrimaryKey
possibleDuplicate_PrimaryKey
queryRuleUsed
4)Now I would build a form with two synchronized conintous subforms using the above table in queries. Subform 1 would be a continous list of all records with possible duplicates. Subform 2 would be the related possible duplicates. I would have some buttons on the form to do "delete all possible duplicates", "delete a specific duplicate", "copy missing data from duplicates." This will allow me to manage the duplicates
Obviously you need to focus on preventing this in the future. You should not be able to enter a new company without it searching the DB for possible duplicate records. Different countries have different ways to uniquely ID a buisness such as Tax ID number.
If interested in this approach I will show some examples.