### Elasticsearch Version

8.1.0-SNAPSHOT (but also affects 7.x releases)

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

OSX

### Problem Description

While the docs state that `RANDOM(null) = null` that's not always the case.

### Steps to Reproduce

```
GET _sql?format=txt
{
  "query": """
  SELECT random(n), n FROM longs
  """
}
```

yields 

```
    random(n)     |       n       
------------------+---------------
0.7308781907032909|1              
0.7311469360199058|2              
0.3860252809814635|null           
```

Expected would be `null` for the last row.

### Logs (if relevant)

_No response_
x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/math/MathProcessor.java
LOG10(Math::log10),
        PI(() -> Math.PI),
        RADIANS(Math::toRadians),
        RANDOM((Object l) -> l != null ? new Random(((Number) l).longValue()).nextDouble() : Randomness.get().nextDouble(), true),
        SIGN((Object l) -> {
            if (l instanceof Double) {
                return (int) Math.signum((Double) l);
            }
            if (l instanceof Float) {
                return (int) Math.signum((Float) l);
            }
            if (l instanceof BigInteger) {
                return ((BigInteger) l).signum();
            }
            return Long.signum(((Number) l).longValue());
        }),
        SIN(Math::sin),
        SINH(Math::sinh),
        SQRT(Math::sqrt),
        TAN(Math::tan);
        private final Function<Object, Number> apply;
        MathOperation(Function<Object, Number> apply) {
            this(apply, false);
        }
        /**
         * Wrapper for nulls around the given function.
         * If true, nulls are passed through, otherwise the function is short-circuited
         * and null returned.
         */
        MathOperation(Function<Object, Number> apply, boolean nullAware) {