SQLite Forum

Deleted rows not in FreeList
The freelist contains a list of free **pages** not free **rows**.  If you delete a **row** from a **page** and there are other **non-deleted rows** on that same **page**, then the **page** is not free and hence is not moved to the list of free pages.

In the scenario where **deleting a row** does not **free the page** the only thing you can be sure of it that the **row which has been deleted** is no longer referenced in the **btree index** for the table.  Whether the **space that the row used to occupy** is now free, re-packed, or overwritten in whole or in part is an implementation detail over which you have no control (although you can enable the secure overwrite feature to overwrite the space the row used to occupy with gibberish thus obfuscating any prior contents).