Last_insert_id() könnte theoretisch auch die falsche ID zurückliefern, da das "Holen" der ID ja nicht innerhalb der Abfrage erfolgt.
das
returning von PosGresSQL/FireBird/... liefert den Wert als Teil der Abfrage zurück. OUTPUT von
MSSQL liefert sogar wohl den kompletten Datensatz.