Если там подзапрос t2 или t1 возвращает ноль, то основной запрос вернет ноль, вы всегда должны кодировать это, используя coalesce. Поскольку t1 потенциально возвращает 2 строки, вам нужно сложить pay_1 перед вычислением trx, чтобы избежать удвоения неявного перекрестного соединения. Упрощенная версия вашей модели и запроса иллюстрирует
drop table if exists t,t1;
create table t(payment int);
create table t1(nominal int, to_agent int, from_agent int);
insert into t values (10),(10);
select
payone,
sum(pay_2) pay2,
payone - sum(pay_2) pay1_pay2,
coalesce(payone,0) - sum(coalesce(pay_2,0)) as trx
from
(
select sum(pay_1) payone from
(
select sum(payment) pay_1 from t
union all
select sum(nominal) pay_1 from t1 where to_agent = 1
) s
) a
,
(select sum(nominal) pay_2 from t1 where from_agent = 1) b;
+------+------+-----------+------+
| pay1 | pay2 | pay1_pay2 | trx |
+------+------+-----------+------+
| 20 | NULL | NULL | 20 |
+------+------+-----------+------+
1 row in set (0.001 sec)