I usually use a date as a soft delete. If it's non-null, its deleted, and, you get to record the actual date of deletion.
I've never found it to be a problem. In fact, I find it's more of a problem to physically delete. You just have to design that way from the get go. Not added on after you've realized ppl leave.
Yeah, I find the sentiment that this is hard to implement without it being YOOGE tech debt odd. There are so many ways to get it out of the way, including just querying through a view if you can't come up with an app-side solution.
The technical debt might be proportional to how many ad-hoc queries you have buried in various modules before you realize that some things do need to be deleted as of a particular date. But as you indicate, with a real DBMS, naive queries can just be pointed at a view.
Also, how to deal with down the road queries wrt; churn when you have deleted the data. I'm calling self inflicted technical debt because of shortsightedness or, dare I say it, lack of acumen. :D
I've never found it to be a problem. In fact, I find it's more of a problem to physically delete. You just have to design that way from the get go. Not added on after you've realized ppl leave.