It’s by design – it’s one of many extensions to the standard that MySQL permits.
For a query like SELECT name, MAX(age) FROM t;
the reference docs says that:
Without GROUP BY, there is a single group and it is indeterminate
which name value to choose for the group
See the documentation on group by handling for more information.
The setting ONLY_FULL_GROUP_BY
controls this behavior, see 5.1.7 Server SQL Modes enabling this would disallow a query with an aggregate function lacking a group by statement and it’s enabled by default from MySQL version 5.7.5.