Why does MySQL allow HAVING to use SELECT aliases?
Well when you have a question of this sort the best source of information IMHO is MySQL documentation. Now to the point. This is the behavior of MySql extension to GROUP BY which is enabled by default.


  MySQL Extensions to GROUP
  BY
  MySQL extends this behavior to permit the use of an alias in the
  HAVING clause for the aggregated column


If you want standard behavior you can disable this extension with sql_mode ONLY_FULL_GROUP_BY

SET [SESSION | GLOBAL] sql_mode = ONLY_FULL_GROUP_BY;


If you try to execute the above-mentioned query in ONLY_FULL_GROUP_BY sql_mode you'll get the following error message:


  Non-grouping field 'Amount' is used in HAVING clause: SELECT
  YEAR(orderdate), COUNT(*) as Amount FROM Orders GROUP BY
  YEAR(orderdate) HAVING Amount > 1


Here is SQLFiddle demo

Therefore it's up to you how to configure and use your instance of MySQL.