• A close reading of SQL Server Books Online strongly implies that MONEY and SMALLMONEY are stored as "bigint" and "int" datatypes with an implied decimal point. This means that

    (1) MONEY and SMALLMONEY will tend to be more compact on disk than DECIMAL, and

    (2) User a5xo3z1 is correct in stating that rounding errors will be an issue when multiplying and dividing (but not for adding and subtracting).

    (3) A numeric conversion will definitely take place if MONEY or SMALLMONEY are converted to DECIMAL.

    Here is the quote from BOL. Note how the max and min values of MONEY and BIGINT line up exactly when the decimal point is removed. The same is true for SMALLMONEY and INT:

    money

    -----

    Monetary data values from -2^63 (-922,337,203,685,477.5808) through 2^63 - 1 (+922,337,203,685,477.5807), with accuracy to a ten-thousandth of a monetary unit. Storage size is 8 bytes.

    bigint

    ------

    Integer (whole number) data from -2^63 (-9223372036854775808) through 2^63-1 (9223372036854775807). Storage size is 8 bytes.

    smallmoney

    ----------

    Monetary data values from -214,748.3648 through +214,748.3647, with accuracy to a ten-thousandth of a monetary unit. Storage size is 4 bytes.

    int

    ---

    Integer (whole number) data from -2^31 (-2,147,483,648) through 2^31 - 1 (2,147,483,647). Storage size is 4 bytes.