Best Practices for Separating Content from Presentation in SQL
It depends.  There is no one-size-fits-all answer.  Yes, a database is a persistent store for data -- focus on that when designing the schema.
Meanwhile, let me point out that
DATE_FORMAT(last_edit, '%d/%m/%Y') AS last_edit,

implies something that needs to be strongly stated:  Store the data in a generic format:

Store Dates and times in the database in a format suitable to the database.  This may require conversion both during input and output.  It facilitates filtering and sorting (as in your example, the typos notwithstanding).
Store text as UTF-8, not html-entites, latin1, etc.  This implies adding entities (or whatever) after SELECTing the data back out.
Monetary values stored as DECIMAL; scientific as FLOAT/DOUBLE. etc.
JSON can be handy for storing random attributes (think EAV) that don't need to be sorted/searched too much.

But, let's study a common example:  Should an &quot;address&quot; be split into address1, address2, city, province, country, postal_code.  Versus a directly printable address.
One rule for deciding is whether you will ever need to search/sort on individual pieces of the data.  Keep in mind that it is very hard and very inefficient to split apart fields for such purposes.
At the other extreme, would you even think about splitting up an image into pixels?  (I hope not.)
Now, back to your question.  Your example seems to have reasonable datatypes under the covers.  But your question is who does the formatting as it comes out.  You have given simple examples where it is quite simple to use SQL to do the formatting.  I would probably write it the way you did for a &quot;simple&quot; system.
If there is any chance of changing the formatting (eg, flipping and adding a comma: &quot;last_name, first_name&quot;) you should probably leave that for later code.
For something more complex, it is better to postpone formatting.
Some things are messy in SQL, so it is better to leave for later code:

Pivoting -- You have 2-dimensional data stored in 1D.  (Follow tag [pivot-table])
Want to build tabular data but not duplicate the value (vertically) until it changes.  This is too cryptic to do in SQL; it is better to do in formatting code.

As for IF (private = 1, ' (Private)', ' (Public)'), consider switching from numeric to ENUM('public', 'private').