For my company, we wanted the Opportunity Record, but not the perpetual new Contact.
Assuming the user flags the lead with the existing contact record, I created a workflow that runs when the lead is qualified.
1. The workflow checks to see if the contact look up is populated on the lead
If it is, it updates the contact on the opportinity with that contact record.
2 Then I update the parent contact record (the one automatically created) to an inactive status.
3. I debated on going back to lead and changing the parent contact id (I believe to do this, I would have to mark the lead as open in the workflow, update the parent contact id, then re-mark the lead as Qualified.
In theory, I could then have a bulk delete job automatically delete the inactive contacts that were deactivated by the workflow.
I just wrote the workflow, and it seems to work. I would like to see others opinions of the downside of doing it this way. We enter leads for existing contacts all the time, so duplicate detection, as far as I can tell, won't work for us.