One order matched two payments. The join emitted a row for each.
The common read: A join attaches the matching row to the row I started with, so the result still has one row per thing I was counting.
The order table holds one row for order 1001, and the join to payments returns two, because the cafe paid that invoice in two installments. The documentation defines an inner join as producing, for each row of the left input, a row for each row of the right input that satisfies the condition. Both rows carry the same order_id, the same cafe and the same 640.00, differ only in the payment columns, and nothing in the output marks either one as a defect.
The word for how many rows a table holds per real-world thing is grain, this course's word rather than PostgreSQL's: orders is at one row per order, payments at one row per payment, and the joined result at one row per payment that matched an order. Nobody wrote that last grain down. The tile has used this join since the dashboard was built, and the two people who reviewed its query both read the join and neither checked the grain.

