NUMBER and PLS_INTEGER differ primarily in storage. NUMBER is a variable-length decimal type stored with mantissa and exponent, while PLS_INTEGER is a fixed-length binary integer stored in native machine format, making it more efficient for calculations.