Claro, eso es por que estás selccionando la columna m.saldo, a la fuerza tendrá que sacar un resultado por cada movimiento, si no quieres que se repitan deberías quitarlo de la lista de selección y dejar sólo los de créditos:
Código SQL:
Ver originalSELECT c.id, c.rec_fin, c.periodo
FROM credito C
WHERE c.id_user = 96
ORDER BY c.periodo
O bien hacer DISTINCT para que no se repitan aquellos con el mismo saldo, aunque sacaría una fila por cada saldo distinto:
Código SQL:
Ver originalSELECT DISTINCT c.id, c.rec_fin, c.periodo, m.saldo
FROM credito c
JOIN movimiento m ON c.id = m.id_credito
WHERE c.id_user = 96
ORDER BY c.periodo