Да, это потому что "в конце". Обработчики перебираются последовательно, и как находится подходящий, остальные не используются. А тут два обработчика с одинаковым декоратором, естественно, что первый будет применяться, а второй уже нет.
Надо или обрабатывать обе команды в одной функции, или отфильтровать в декораторе так, чтобы он применялся только к конкретным сообщениям
Условие
commands=["баланс"]
в декораторе позволит использовать команду как /баланс
А вот такой вариант:
@dp.message_handler(lambda message: message.text and (message.text.lower() == "баланс"))
позволит сделать то же самое без / перед словом "баланс". И вообще, так можно делать более сложные проверки.