A computer-implemented method for identifying rows deleted from a base table by a data manipulation statement as part of a transaction, wherein a current version of data is stored in the base table and wherein a row deleted from the base table remains as a ghost record in the base table, the ghost record being a placeholder for the deleted row which does not include substantive data, the base table including data columns, a transaction identifier column storing an identifier of a transaction in which a current version of each row was committed and a sequence number column identifying a sequence in which changes are made within the transaction in which the current version of each row was committed, the method comprising: setting a transaction identifier of a delete marker to an identifier of the transaction having the data manipulation statement; setting a sequence number of the delete marker to a sequence number of the last change committed as part of the transaction having the data manipulation statement, the sequence number being a monotonically increasing value assigned to each change made within the transaction having the data manipulation statement; executing the statement, wherein when the statement changes a row, a current version of the row is stored in the base table and a previous version of the row is stored in a version store; scanning the base table with the delete marker by the following steps a) to e): a) determining if the transaction identifier of a row is equal to the transaction identifier of the delete marker; b) if the transaction identifier of the row is not equal to the transaction identifier of the delete marker, then reading the row and adding the row to scan results; c) if the transaction identifier of the row is equal to the transaction identifier of the delete marker, then determining if the sequence number of the row is less than or equal to the sequence number of the delete marker; d) if the sequence number of the row is less than or equal to the sequence number of the delete marker, then reading the row and adding the row to the scan results; and e) if the sequence number of the row is not less than or equal to the sequence number of the delete marker, then retrieving the previous version of the row from the version store and returning to step a) using the retrieved previous version of the row; filtering rows of the scan results with deletions stored in a delta table, the delta table identifying changes made by the statement and indicating whether a change is an insertion or a deletion; and populating a delete table with the filtered results. setting a transaction identifier of a delete marker to an identifier of the transaction having the data manipulation statement; setting a sequence number of the delete marker to a sequence number of the last change committed as part of the transaction having the data manipulation statement, the sequence number being a monotonically increasing value assigned to each change made within the transaction having the data manipulation statement; executing the statement, wherein when the statement changes a row, a current version of the row is stored in the base table and a previous version of the row is stored in a version store; scanning the base table with the delete marker by the following steps a) to e): a) determining if the transaction identifier of a row is equal to the transaction identifier of the delete marker; b) if the transaction identifier of the row is not equal to the transaction identifier of the delete marker, then reading the row and adding the row to scan results; c) if the transaction identifier of the row is equal to the transaction identifier of the delete marker, then determining if the sequence number of the row is less than or equal to the sequence number of the delete marker; d) if the sequence number of the row is less than or equal to the sequence number of the delete marker, then reading the row and adding the row to the scan results; and e) if the sequence number of the row is not less than or equal to the sequence number of the delete marker, then retrieving the previous version of the row from the version store and returning to step a) using the retrieved previous version of the row; a) determining if the transaction identifier of a row is equal to the transaction identifier of the delete marker; b) if the transaction identifier of the row is not equal to the transaction identifier of the delete marker, then reading the row and adding the row to scan results; c) if the transaction identifier of the row is equal to the transaction identifier of the delete marker, then determining if the sequence number of the row is less than or equal to the sequence number of the delete marker; d) if the sequence number of the row is less than or equal to the sequence number of the delete marker, then reading the row and adding the row to the scan results; and e) if the sequence number of the row is not less than or equal to the sequence number of the delete marker, then retrieving the previous version of the row from the version store and returning to step a) using the retrieved previous version of the row; filtering rows of the scan results with deletions stored in a delta table, the delta table identifying changes made by the statement and indicating whether a change is an insertion or a deletion; and populating a delete table with the filtered results.