Joins we do.
Start by creating synonyms for Account and Contact.
Then in the DMC create a "cluster" join of the two objects.
1. Use New, Synonym via Synonym Editor to create a new empty synonym.
2. Click on the modeling view tab.
3. Right click and select Insert, Reference to existing synonym [as root]. Select Contact.
4. Right click on CONTACT and select Insert, Reference to existing synonym [as child]. Select Account.
5. Click the save button and give it a name, contact_account, and click Save.
Now you can create a data flow that generates a SQL statement like this:
SELECT
T1.CONTACT.NAME AS NAME ,
T1.EMAIL ,
T1.ACCOUNT.NAME AS ACCOUNT_NAME
FROM
contact_account T1
That does what you want, but don't take my word for it. Run the query, then right click on the server name and select "Server Session Log" and when it appears click Ctrl-F and search for "salesforce soql" and you'll find there's just one SQOL query made.
salesforce soql Request: SELECT AccountId,Name,Email,Contact.Account.Name FROM Contact
You could also enable the tracing salesforce with the component:
SFDC/1/CLIENT
N/A