Hard to say as you are using Load *, but I see that you have dropped ID before the join. This could then result in duplicate rows which were distinct at load only because of the ID field. These duplicates could cause problems. Try the script without dropping the ID field.
Logic will get you from a to b. Imagination will take you everywhere. - A Einstein
I tried to remove "Drop Field", but it didn't change. I also removed all the distinct after this but it didn't help. Then I added "Drop Field" after the join-expression, tried that, and then added Distinct again but it didn't help...
Your problem will be linked to the null values in your data creating duplicates. If every one of your records has at least 1x null field (which it may do for lots of columns), it will appear to double your row count.
Try joining on one unique row identifier instead of *, or create your own similar to this ...
load rowno() as rowid, *, 'data1' as source;
SQL SELECT distinct * FROM ...;
concatenate load rowno() as rowid, *, 'data2' as source;