hola computer_si:
En realidad tienes muchas formas de realizar esta consulta, aunque hacerla con UNION no creo que sea una de las más adecuadas... creo que la forma más sencilla que tienes sería con subconsultas y JOIN's... agrupando cada tabla por separado antes de hacer la resta, sería más o menos así:
Código MySQL:
Ver original+------+------+------+
| ref | mov | imp |
+------+------+------+
| A | 1 | 2000 |
| B | 1 | 3000 |
| C | 1 | 900 |
| D | 1 | 2500 |
+------+------+------+
+------+------+------+
| ref | mov | imp |
+------+------+------+
| A | 1 | 600 |
| A | 2 | 300 |
| B | 1 | 3000 |
| C | 1 | 200 |
+------+------+------+
mysql
> SELECT T1.ref
, T1.total
- IFNULL(T2.total
, 0) gran_total
+------+------------+
| ref | gran_total |
+------+------------+
| A | 1100 |
| B | 0 |
| C | 700 |
| D | 2500 |
+------+------------+
Observa en primer lugar que hago dos subconsultas, marcadas como T1 y T2, donde agrupo cada una de las tablas (pensando que en ambas tablas pueda haber múltiples registros para cada ref... una vez que los datos están agrupados los uno mediante un LEFT JOIN (no utilizo INNER pues hay ref de la tabla bd1 que no aparecen en la tabla bd2)... la parte del IFNULL es justamente para los casos donde no tengas que restar nada (en realidad resta un 0, pues de lo contrario el resultado sería un NULL). Dale un vistazo y nos comentas si te sirvió.
Saludos
Leo.