**Describe the unexpected behaviour**

If a start value for the Array range() function is specified, the array for subsequent rows doesn't start at the specified value, but instead counts upwards. Example:

```sql
SELECT c1, range(0, c1) AS zero_as_start_val, range(1, c1) AS one_as_start_val, range(c1) AS no_start_val
FROM values(2, 3, 4, 5);
```

| c1 | zero\_as\_start\_val | one\_as\_start\_val | no\_start\_val |
| :--- | :--- | :--- | :--- |
| 2 | \[0, 1\] | \[1\] | \[0, 1\] |
| 3 | \[2, 3, 4\] | \[2, 3\] | \[0, 1, 2\] |
| 4 | \[5, 6, 7, 8\] | \[4, 5, 6\] | \[0, 1, 2, 3\] |
| 5 | \[9, 10, 11, 12, 13\] | \[7, 8, 9, 10\] | \[0, 1, 2, 3, 4\] |


I'm not sure if this is desired behaviour.

**How to reproduce**
* Which ClickHouse server version to use: ClickHouse server version 22.13.1.1133 (official build) (macOS arm64)
* [Clickhouse Playground](https://play.clickhouse.com/play?user=play#U0VMRUNUIGMxLCByYW5nZSgwLCBjMSkgQVMgemVyb19hc19zdGFydF92YWwsIHJhbmdlKDEsIGMxKSBBUyBvbmVfYXNfc3RhcnRfdmFsLCByYW5nZShjMSkgQVMgbm9fc3RhcnRfdmFsCkZST00gdmFsdWVzKDIsIDMsIDQsIDUpOw==)


**Expected behavior**

I'd expect all arrays to start with the specified start value.
{
        DataTypePtr elem_type = checkAndGetDataType<DataTypeArray>(result_type.get())->getNestedType();
        WhichDataType which(elem_type);
        if (!which.isNativeUInt() && !which.isNativeInt())
        {
            throw Exception{"Illegal columns of arguments of function " + getName()
                            + ", the function only implemented for unsigned/signed integers up to 64 bit",
                            ErrorCodes::ILLEGAL_COLUMN};
        }
        ColumnPtr res;
        if (arguments.size() == 1)
        {
            const auto * col = arguments[0].column.get();
            if (!((res = executeInternal<UInt8>(col)) || (res = executeInternal<UInt16>(col)) || (res = executeInternal<UInt32>(col))
                  || (res = executeInternal<UInt64>(col)) || (res = executeInternal<Int8>(col)) || (res = executeInternal<Int16>(col))
                  || (res = executeInternal<Int32>(col)) || (res = executeInternal<Int64>(col))))
            {
                throw Exception{"Illegal column " + col->getName() + " of argument of function " + getName(), ErrorCodes::ILLEGAL_COLUMN};
            }
            return res;
        }