Similar to another scenario, when a user is removed from the system, both all of the things they owned and the history of all the things they touched are either removed from association with that user or obliterated entirely.
As explained in the other post, this means that at one point in time it may have been obvious to us that the owner of a post and the user who deleted it were one and the same. Since we keep posts when a user is removed, even deleted ones, but remove information about who created or deleted them, once the user is removed, we can no longer be sure the author and the deleter are the same user. And in fact most of the time we can be pretty sure it's not moderation at that point, because very few moderators ever step down and further also have all of their information removed (since, if a valid user is still marked as the deleter, we should be able to tell if they're a moderator now, but maybe not if they were one in the past).
Still, the code currently seems to say something like this*, with a simple fallback to moderation in the case of a non-match:
IF (Post IS DELETED)
IF (OwnerID === DeleterID)
echo "This question was voluntarily removed by its author.";
echo "This question was removed ... for reasons of moderation ...";
* This is not the actual code, it is an artist's rendering
This logic certainly works for the case where a moderator or the community user has in fact deleted the post (except maybe in the case of community wiki?) - falling to the else. Of course, if the user was removed, whether they deleted the post, or a current or former moderator, or even a sock puppet that was never properly merged, that equality check will never succeed.
The fact that the post was removed is, for most, far more important and interesting than who removed it. So I propose the logic simply become:
IF (Post IS DELETED)
echo "This question was removed.";
Schema changes would be necessary to do anything more specific and still be reasonably accurate. For example, we could have a column that represents
DeleteType that has an enum for
Community. And even "Well, the question was deleted, derp!" in the case of an answer. Then the nature of the action could be preserved regardless of the current state of any of the users involved in the action.
But I don't anticipate such a change becoming a high priority any time soon, for multiple reasons - including that that detail doesn't seem like it should be relevant to most users of the system. The post was deleted; the fact that you can still see it is a benefit extended to high rep users, but not for the reason that they can sleuth around and try to determine what might have happened leading to its deletion or to the original user, especially how we need to treat privacy.