Vous avez plusieurs lignes dans la table de crédit, cela fait plusieurs lignes avant le groupe qui cause le problème. Vous pouvez le voir si vous supprimez le groupe par et sélectionnez toutes les colonnes.
Si vous groupez par dans une sous-jointure, ce problème disparaît, vous avez alors une ligne par client avant le groupe par.
SELECT
customers.id as id,
customers.cust_name AS customer_name,
SUM(cust_debit.debit_amount) as debit,
SUM(cust_credit.credit_amount) as credit,
(SUM(cust_debit.debit_amount)) - (SUM(cust_credit.credit_amount)) as balance
FROM customers
LEFT JOIN cust_debit ON customers.id = cust_debit.cust_id
LEFT JOIN (
SELECT cust_id, sum(credit_amount) as credit_amount)
from cust_credit
group by cust_id
) cust_credit ON customers.id = cust_credit.cust_id
GROUP BY customers.id
ORDER BY customers.id