**Describe the bug**
```
milovidov-desktop :) SET allow_experimental_analyzer = 1

SET allow_experimental_analyzer = 1

Query id: b4494b8c-9f14-4d46-8db9-2cb992dcfcb6

Ok.

0 rows in set. Elapsed: 0.001 sec. 

milovidov-desktop :) SELECT arrayFilter(x -> notEmpty(concat(x)), [NULL, NULL]) FROM system.one ARRAY JOIN [1048577] AS elem, arrayMap(x -> concat(x, elem, ''), ['']) AS unused

SELECT arrayFilter(x -> notEmpty(concat(x)), [NULL, NULL])
FROM system.one
ARRAY JOIN
    [1048577] AS elem,
    arrayMap(x -> concat(x, elem, ''), ['']) AS unused

Query id: ca118c75-812b-4c83-bd30-1af64ed38635


0 rows in set. Elapsed: 0.003 sec. 

Received exception from server (version 22.13.1):
Code: 49. DB::Exception: Received from localhost:9000. DB::Exception: Cannot capture column 3 because it has incompatible type: got Array(UInt32), but UInt32 is expected.. (LOGICAL_ERROR)
```
const Identifier & unresolved_identifier,
    const DataTypePtr & compound_expression_type,
    const Identifier & valid_identifier_prefix,
    std::unordered_set<Identifier> & valid_identifiers_result)
{
    std::vector<std::pair<Identifier, const IDataType *>> identifiers_with_types_to_process;
    identifiers_with_types_to_process.emplace_back(valid_identifier_prefix, compound_expression_type.get());
    while (!identifiers_with_types_to_process.empty())
    {
        auto [identifier, type] = identifiers_with_types_to_process.back();
        identifiers_with_types_to_process.pop_back();
        if (identifier.getPartsSize() + 1 > unresolved_identifier.getPartsSize())
            continue;
        while (const DataTypeArray * array = checkAndGetDataType<DataTypeArray>(type))
            type = array->getNestedType().get();
        const DataTypeTuple * tuple = checkAndGetDataType<DataTypeTuple>(type);
        if (!tuple)
            continue;
        const auto & tuple_element_names = tuple->getElementNames();
        size_t tuple_element_names_size = tuple_element_names.size();
        for (size_t i = 0; i < tuple_element_names_size; ++i)
        {
            const auto & element_name = tuple_element_names[i];
            const auto & element_type = tuple->getElements()[i];
            identifier.push_back(element_name);