Create ChangeSets in objects and deploy them - duplicate in DatabaseChangeLog

I am experimenting trying to create ChangeSets on the fly using DatabaseChangeLog and ChangeSet objects. I am able to build a ChangeSet for createTable with a precondition if the table already exists, the table is correctly created when deploying the ChangeSet but if I happen to try to deploy it a second time, it does not detect that it already has been deployed. A duplicate entry is created in DatabaseChangeLog with the same CheckSum as MARK_RAN, which proves the precondition works. When debugging, the CheckSum value on the ChangeSet for the 1st and 2nd tries are both null, alwaysRun and runOnChange are both false. Any idea why deployed ChangeSets are not correctly detected in this context?