Also got this problem. Really annoying.
iPhone 11 Pro, 256GB, iOS 13, local sync (iTunes) using iMac (2017, 21,5", macOS 10.14.6, iTunes 12.9.5.5)
With each sync, despite selecting replace Contact/Cal or not Birthday Cal keeps adding another entry for each one.
Even after removing all Contacts/Cal from iPhone Birthday Cal still has entries. If you click on one it shows an "empty" contact.
Moreover sync'ing Contacts doubles each entry; i.e. on macOS there is e.g. Person A, Person B, Person C, ... and on iPhone after sync: Person A, Person A, Person B, Person B, ... each with a "full entry", i.e. Pic, Adresse, Phonenumbers, etc.
This needs to be fixed really quick.
It really sucks that Apple is not able to get local sync working correctly. Each new macOS/iPhone there are always issues. Sometimes not all Cal sync, sometimes Contacts are missing, sometimes you get doubles, etc. etc. - back in 2009 when I started with an iPod touch and a MacBook and that **** iCloud was no thing everything went so smooth - wish we could have back this good ol' days :(