Wenn mich nicht alles täuscht garantiert einem der SQL-Standard nicht, in welcher Reihenfolge mehrere Ergebniszeilen beim Gruppieren zu einer zusammengefügt werden, so dass das Sortieren in der inneren Abfrage theoretisch auch wirkungslos bleiben dürfte, ohne dass die Datenbank den Standard verletzt.
Ich gehe zwar davon aus, dass sich keine Datenbank so unintuitiv verhält, aber eine alternative Lösung, die die Spezifikationslücke umgehen sollte, wäre noch folgendes Konstrukt:
SELECT *
FROM tiet_user_settings
INNER JOIN (SELECT userId, settingId, MAX(created) AS created
FROM tiet_user_settings
GROUP BY userId, settingId)
USING (userId, settingId, created)
WHERE userId = ?;
When C++ is your hammer, every problem looks like your thumb.