Drift is rarely dramatic. A hotfix applied directly to production, an index added during an incident, a column left behind by a reverted release. Individually harmless, collectively the reason a tested change fails on the way out.
A production incident is resolved with a direct connection. The fix is correct and never makes it back into the change history or the lower environments.
A deployment fails halfway. Some statements committed, some did not, and now the target is in a state no migration file describes.
Staging was cloned from a production backup months ago and has been drifting ever since, so it no longer represents either past or present.
A DBA adds an index or changes a constraint to solve a real problem in one environment only. Nothing is wrong, but the environments are no longer comparable.
Compare two environments and see differences across tables, columns, indexes, constraints, and other schema objects, presented as a readable diff instead of two scripts to eyeball side by side.
Comparison runs between two databases on the same engine, and the scripts it produces are generated for that engine's dialect rather than assembled from generic SQL that then fails on the specifics.
Produce a script that brings the target in line with the source, ordered so dependent objects are created and dropped in a valid sequence rather than failing partway through.
For reference and configuration tables where contents matter as much as structure, compare selected datasets and review inserted, updated, and deleted rows before syncing.
Syncing a target fixes today's symptom. Drift stops recurring when out-of-band change stops being the path of least resistance, which is the part most drift tooling leaves to you.
If shipping a change through review takes minutes rather than days, the incentive to connect directly to production largely disappears.
With production read-only by default and edits requiring explicit permission, an out-of-band change becomes a deliberate, logged act rather than a reflex.
Run comparison between environments regularly so divergence is caught while it is one column, not after it has accumulated for a quarter.