In the scenario that you describe Teiid should query only one side. You can confirm this by viewing the query plan. If you just interested in seeing plan, be sure to call "SET NOEXEC ON" to disable execution.
Teiid will always attempt to push conjunctive predicates as far as it can, which can be through views, unions, or joins. Each time the predicate crosses a view layer or a view layer is removed from the query, the predicates are updated with the projected values. So in your example there should be a point in planning where each union branch has a predicate with nothing but literals, like 'Source A'='Source A'. At that point the optimizer will evaluate the predicate and adjust the plan accordingly.