Your question is Debug a Faulty SQL Query. Take a moment with it on the right.
Talk me through your thinking if you like. When you're confident, submit your answer and I'll grade it like a real screen (7/10 or better passes).
Broadridge processes trade settlements for asset managers, and a reconciliation report built from the query below is producing numbers the operations team doesn't trust.
CREATE TABLE trades (
trade_id INT PRIMARY KEY,
security_id INT,
shares INT,
price_cents INT,
trade_date DATE
);
CREATE TABLE settlements (
settlement_id INT PRIMARY KEY,
trade_id INT,
settlement_date TIMESTAMP,
status VARCHAR(20),
reconciled_date TIMESTAMP
);
SELECT t.trade_id, t.shares, (t.price_cents / 100) AS price_dollars
FROM trades t
JOIN settlements s ON s.trade_id = t.trade_id
WHERE s.reconciled_date = NULL
AND s.settlement_date BETWEEN '2026-09-01' AND '2026-09-07'
UNION
SELECT t.trade_id, t.shares, (t.price_cents / 100) AS price_dollars
FROM trades t
JOIN settlements s ON s.trade_id = t.trade_id
WHERE s.status = 'PENDING';
This is meant to list every trade with an unreconciled or pending settlement in the first week of September, one row per trade. What is wrong with this query, and how would you fix it?