How to Find Missing Records Between Two Database Exports
Most guides for this assume you can run a query - a LEFT JOIN or an EXCEPT against two live tables. That's the right approach if you have
database access. But a common real situation is different: someone handed you two exported files -
a CSV from the old system, a CSV from the new one, a spreadsheet a colleague sent over - and you
need to know which records are missing from each, with no query, no login, and no database
connection at all.
Quick answer
Extract the key column (ID, email, order number - whatever uniquely identifies a row) from each export and paste them into a list comparison tool. 'A Only' shows records in the first export that are missing from the second. 'B Only' shows the reverse. This is the same result a LEFT JOIN ... WHERE ... IS NULL query would give you, without needing to write or run one.
Compare your two exports now. Free, no account needed.
Open Compare Two Lists →Step 1: extract just the key column
If your export is a full multi-column CSV or spreadsheet, isolate the single column that uniquely identifies each record - a customer ID, order number, email address, SKU. If it's already a plain column, copy it directly. If you need to pull one column out of a wider CSV export first, the Column Extractor does that by column number.
Step 2: paste each column into its own list
Paste the key column from Export A into List A, and the key column from Export B into List B, in the Compare Two Lists tool. Each unique ID should be on its own line.
Step 3: read A Only and B Only
- A Only: records present in Export A but missing from Export B. If A is the old system and B is the new one, these are records that didn't migrate.
- B Only: records present in Export B but missing from Export A. If B is the new system, these are typically new records created since the export was taken, or duplicates introduced during migration.
This is the direct equivalent of running the query in both directions - once to find what's missing from B, once to find what's missing from A - except you get both results from the same comparison at once, in the A Only and B Only panels.
How this maps to the SQL approach
If you do have query access, the equivalent SQL is a LEFT JOIN with a
null check on the joined side:
SELECT a.id FROM export_a a LEFT JOIN export_b b ON a.id = b.id WHERE b.id IS NULL;
or the shorter EXCEPT operator on databases that support it:
SELECT id FROM export_a EXCEPT SELECT id FROM export_b;
A Only in the comparison tool is the same result as either query. The difference is that this approach works from two plain files with no query, no database connection, and no write access required - useful when you're an analyst, a support agent, or a QA tester who was handed export files rather than direct database access.
When you also need to check if values changed
Finding missing records only tells you which keys don't exist on one side. If you also need to know whether a matched record's data is different between the two exports - a status field, a price, an address - a plain list comparison won't show that, since it only compares the key column. Use the Column Compare tool instead: it matches rows by key and also flags rows where a chosen value column differs, similar to a SQL join that also compares a value column between both tables.
Handling formatting differences between exports
Exports from different systems often format the same ID differently - one keeps a leading zero, the other strips it; one is uppercase, the other lowercase. Turn on Ignore Leading Zeros and disable Case Sensitive in the comparison options so these formatting differences don't produce false "missing" results. If the exports are messier than that - inconsistent date formats, stray whitespace, null markers written differently - run each key column through the Data Cleaner first.
Comparing more than two exports?
Multi-List Compare handles 3 to 8 exports at once, with a Venn diagram of the overlaps.
Frequently Asked Questions
How do I find missing records between two exports without database access?
What's the SQL equivalent of what this tool does?
SELECT id FROM export_a LEFT JOIN export_b ON export_a.id = export_b.id WHERE export_b.id IS NULL, or the shorter SELECT id FROM export_a EXCEPT SELECT id FROM export_b in databases that support EXCEPT. The comparison tool does the same set operation without you needing to write, connect, or have permission to run either.