Duplicates are always created at the server side or by a multi-path sync setup - the SyncML client cannot do anything about it.
If duplicates are created during normal sync (not "slow sync", see below), this is usually due to so called multi-path (also called "triangular") sync setup. This happens when the same data is transferred between two end points not only by SyncML, but in addition by another means, like ActiveSync or HotSync, or in case of appointments by meeting invitation requests sent by email in parallel to the same data delivered by SyncML. Multi-path sync setups must be avoided - always make sure there is exactly one sync path between two endpoints (Note that it is ok to use both SyncML and other sync methods to sync the same PDA data multiple different endpoints, as long as these don't synchronize between each other and create a loop).
If duplicates are created in "slow sync", this is a server side problem: The way the SyncML synchronisation works is such that the server has to do the decisions if two records (the one from the client, and the one stored on the server) are the same or not.
This matching mechanism is a non-trivial part of a server implementation, as due to the diversity of mobile devices there are always subtle differences between the mobile and server versions of the data, which must be taken into account by the server.
So if you experience duplicates, this must be corrected at the server. Sometimes there are configuration settings at the server side like setting the correct device type etc. Please ask your service provider or server operator.
One possible source for duplicates can be "unusual" records which the server might not be prepared for, like contacts without first or last name, events with dates very early in the past or far in the future, events with exotic recurrence rules, events or task without subject or description.
If you experience duplicates for some specific records only, while others are ok, you might try to find a common pattern from one of the listed possibilities. If it turns out that your server cannot handle a specific pattern, you might be able to avoid it in your data and/or report it to the server operator/manufacturer so they can eventually fix the problem.
There is also a more technical discussion of the topic available in our forum