I think another approach could be:
In dataflow make the main table as driving table (TableA) and keep other table in outer join. This will ensure that you are not discarding anything from TableA. Since it is update you can use NVL(A.Date, B.EndDate) function to update the value only in case there is change in data otherwise it shall preserve what is in TableA.
You need to delete the data based on keys before loading into the main table as above dataflow shall insert the records in case of update. You can use script to delete before this dataflow.