Catch the SQL bug before it ships.
Paste a query, tap Diagnose. DELETE with no WHERE, a LEFT JOIN silently turned inner, a JOIN with no ON condition β caught in plain English, before it reaches production. No account, no AI, no setup.
Tip: add a -- noqa or -- noqa: Finding Title comment in your SQL to suppress a finding you've already reviewed.
π Can't compare yet
β Functionally identical
These two queries produce the same structure β no meaningful differences found.
βΉοΈ Too complex for a detailed diff
CTEs, multiple statements, or non-SELECT queries aren't broken down clause-by-clause yet β here's the formatted text of each to compare by eye.
Query A
Query B
π What changed
Checkingβ¦
π£οΈ In plain English
π Syntax problem
π©Ί Diagnosis
β¨ Cleaned-up version
π Optimizer suggestion
A logically equivalent rewrite (simplified predicates, pruned expressions). Review before using.
π Translated
π Block merges in CI, not just comment
The GitHub Action is free forever for PR comments.
An API key also unlocks fail-on-severity β actually blocking the merge.
Monthly
Annual
Only the key is checked over the network β your SQL is always linted locally, never sent anywhere.
β οΈ Copy this now β it will never be shown again. We don't store it in a way we can show or recover it later.
β
Payment verified. Add it as a repo secret and pass it to the Action as api-key.
Why this isn't just another linter
Most optimizers hand you a "faster" query and let you find out in production whether it still returns the same rows. QueryDoctor executes both versions against generated data first, and drops any rewrite that disagrees with the original.
Every finding comes from walking the parsed syntax tree, not from a model guessing. The same query always gets the same verdict β so it's safe to block a merge on it.
Where the analysis can't be certain β CTEs in Compare, complex queries in the explainer, guessing your SQL dialect β it tells you it's out of scope instead of asserting something plausible and wrong.
The Apply Safe Fixes button is restricted to rewrites that provably can't change your results. Anything judgement-based stays a suggestion for you to make.