Otra cosa: si estás utilizando dos tablas para obtener datos y, a partir de ellas, generar una tercera tabla con el resultado, podrías emplear una "VIEW" (una estructura que genera resultados automatizados y que puede activarse o desactivarse según sea necesario) en SQL, o bien un "STORED PROCEDURE" (procedimiento almacenado) para obtener resultados bajo demanda:
1) La "VIEW" o el "STORED PROCEDURE" pueden contener la consulta SQL ya preparada dentro de tu base de datos.
2) Tanto la "VIEW" como el "STORED PROCEDURE" pueden utilizarse en una sentencia `SELECT` de forma habitual, incluso admitiendo parámetros.
3) De este modo, evitarías incluir todo el código dentro de tu aplicación Delphi y prescindirías de configuraciones manuales. Todo podría gestionarse directamente en el componente SQL —como `FDQuery`, `IBQuery`, `UniQuery`, etc.— utilizando el *Object Inspector* del IDE (a través de sus propiedades visuales). Además, podrías emplear el editor de campos (*Field Editor*) para definir detalles como el formato, entre otros.
4) Utilizar una "VIEW" o un "STORED PROCEDURE" para crear tu nueva consulta resulta mucho más práctico y limpio, ya que facilita el mantenimiento sin necesidad de modificar el código de la aplicación.
5) ¡Tenlo en cuenta!
6) Para tu caso, considero que una "VIEW" es la mejor opción: reside en la base de datos, se actualiza automáticamente a medida que los datos en tus tablas cambian (ya sea por inserciones o eliminaciones), admite parámetros, es sencilla de integrar en un componente y se basa en el uso natural de `SELECT` en SQL. ¡Es la solución ideal!
Código SQL
[-]
CREATE VIEW VW_ExtratoContabil AS
SELECT
Data,
SUM(CASE WHEN Tipo = 'DEB' THEN Valor ELSE 0 END) AS TotalDebito,
SUM(CASE WHEN Tipo = 'CRE' THEN Valor ELSE 0 END) AS TotalCredito
FROM (
SELECT Data, 'DEB' AS Tipo, Valor FROM TableDEB
UNION ALL
SELECT Data, 'CRE' AS Tipo, Valor FROM TableCRE
) AS Movimentacoes
GROUP BY Data;
Código SQL
[-]SELECT * FROM VW_ExtratoContabil ORDER BY Data;