When Contact A is initially injected into the Journey and reaches a Send Email Activity, a Subscriber record is created (if one does not already exist).
If the email address changes while the contact is in the Journey (for example, the email address is updated as defined in the Channel Address Order), or even if the Contact exits the Journey then enters the Journey again at a later date, the previous email will still be used.
This behavior is not unique to Journey Builder either; if you have a Sendable Data Extension and complete a Guided Send Email, then repeat this again at a later date with updated email addresses in the in the Sendable DE, the emails will be sent to the previous Subscriber. The issue is that Salesforce assume all subscribers are using the built-in profile centre to update their email address. But this is often not the case.
The solution isn't great, but its really the only way around this. You will need to create a Scheduled Automation in Automation Studio that runs at a regular interval (e.g. daily) and performs the following tasks:
- SQL Query Activity to identify updated email addresses
- Export Target DE from Query Activity to Enhanced FTP Account using File Transfer Activity
- Import the file exported in step 2 to the All Subscribers list using Import File Activity (refer to screenshot below).