Marking a row as removed or deleted: Is it a good design practice?
The 2nd approach is interesting, but it seems like you could be optimizing the model for a scenario that is not that frequent (introducing a third table to be joined whenever you need to access the user data).  

Also,  your description of the first approach seem to imply that the user table has no other info,  except the one that you need to purge, and it's not necessarily the case (e.g. you may want to track the insertion and purge date to have statistics for the leaving users). 

Finally,  as everyone else has already said, there is not a single "good" answer.  For example,  you might have some audit regulations that forbids you to delete the personal data for a period of time,  so the "isActive" flag would be a better match.