**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)
```
std::unordered_map<std::string, ColumnNodePtr> join_using_column_name_to_column_node;
    if (!join_node_in_resolve_process && from_join_node.isUsingJoinExpression())
    {
        auto & join_using_list = from_join_node.getJoinExpression()->as<ListNode &>();
        for (auto & join_using_node : join_using_list.getNodes())
        {
            auto & column_node = join_using_node->as<ColumnNode &>();
            join_using_column_name_to_column_node.emplace(column_node.getColumnName(), std::static_pointer_cast<ColumnNode>(join_using_node));
        }
    }
    std::optional<JoinTableSide> resolved_side;
    QueryTreeNodePtr resolved_identifier;
    JoinKind join_kind = from_join_node.getKind();
    if (left_resolved_identifier && right_resolved_identifier)
    {
        auto & left_resolved_column = left_resolved_identifier->as<ColumnNode &>();
        auto & right_resolved_column = right_resolved_identifier->as<ColumnNode &>();
        auto using_column_node_it = join_using_column_name_to_column_node.find(left_resolved_column.getColumnName());
        if (using_column_node_it != join_using_column_name_to_column_node.end()
            && left_resolved_column.getColumnName() == right_resolved_column.getColumnName())
        {
            JoinTableSide using_column_inner_column_table_side = isRight(join_kind) ? JoinTableSide::Right : JoinTableSide::Left;
            auto & using_column_node = using_column_node_it->second->as<ColumnNode &>();
            auto & using_expression_list = using_column_node.getExpression()->as<ListNode &>();
            size_t inner_column_node_index = using_column_inner_column_table_side == JoinTableSide::Left ? 0 : 1;
            const auto & inner_column_node = using_expression_list.getNodes().at(inner_column_node_index);
            auto result_column_node = inner_column_node->clone();
            auto & result_column = result_column_node->as<ColumnNode &>();
            result_column.setColumnType(using_column_node.getColumnType());
            resolved_identifier = std::move(result_column_node);