Contact sync woes with Google
You can easily find out where the duplicate contacts come from by going to your Contacts app on your iPhone and tapping on Groups. Then uncheck your Exchange account and see whether the duplicates persist. 

If you are sure that there are no common shared contacts between your personal and your business accounts (Exchange vs CardDAV), I would suppose the duplication comes at the Mac sync stage.

See this for difference between syncing with CardDAV and Exchange. 

It is true, however, that once shown on your iPhone, you cannot tell the difference between the two just by looking at the contact entry.