Это полукартово произведение, потому что порядковый номер не уникален в таблице возвратов.
Мы можем увидеть, что происходит, если убрать агрегатные функции и вернуть подробные строки.
Одним из возможных подходов является предварительная агрегация возвратов во встроенном представлении, чтобы возвращались уникальные значения порядкового номера.
Если предположить, что номер заказа уникален в таблице продаж, то примерно так:
SELECT c.name
, SUM(s.quantity) AS sold
, SUM(s.quantity * s.price) AS turnover
, SUM(r.returncosts) AS returncosts
FROM sales s
JOIN categories c
ON c.id = s.category_id
LEFT
JOIN ( SELECT t.ordernumber
, SUM(t.costs) AS returncosts
FROM returns t
GROUP
BY t.ordernumber
) r
ON r.ordernumber = s.ordernumber
GROUP
BY c.name