The function returns a non-null value of the first non-null expression and of the same data type.
The result can be null only if all arguments can be null. The result is null only if all arguments are null.
The argument's data types must be the same. If one is SMALLINT, all other arguments must be SMALLINT. If one is a decimal then all must be decimal but can have different precisions and scale; the largest precision and scale will be selected as the final result.