**Describe the bug**
columns('regexp') didn't return all columns by regexp where 3+ joins in query 

**Does it reproduce on recent release?**
version 21.3.4 revision 54447

**How to reproduce**

in query we have 3 columns 'test' but returned only one:

```
select columns('test') from                                                                                                                                                               
(select 1 as id, 'a' as test) a                                                                                                                                                                    
left join (select 1 as id, 'b' as test) b on b.id = a.id                                                                                                                                               
left join (select 1 as id, 'c' as test) c on c.id = a.id;                                                                                                                                               
                                                                                                                               
Query id: 2fc3ebdf-8ec9-4684-af02-3b87bfe18705
                                                   
┌─test─┐                                           
│ c    │                                           
└──────┘                                           
                                                   
1 rows in set. Elapsed: 0.007 sec.
```

but if we change query:

```
select  columns('test'), a.test as t1, b.test as t2, c.test as t3 from 
(select 1 as id, 'a' as test) a 
left join (select 1 as id, 'b' as test) b on b.id = a.id 
left join (select 1 as id, 'c' as test) c on c.id = a.id

Query id: 5bf07e05-ec0e-4017-853d-b7b23b8a6b16

┌─--a.test─┬─--b.test─┬─test─┬─t1─┬─t2─┬─t3─┐
│ a        │ b        │ c    │ a  │ b  │ c  │
└──────────┴──────────┴──────┴────┴────┴────┘

1 rows in set. Elapsed: 0.006 sec.
```
{
public:
    struct Data
    {
        std::unordered_map<String, NamesAndTypesList> table_columns;
        std::vector<String> tables_order;
        std::shared_ptr<ASTExpressionList> new_select_expression_list;
        explicit Data(const std::vector<TableWithColumnNamesAndTypes> & tables)
        {
            tables_order.reserve(tables.size());
            for (const auto & table : tables)
            {
                String table_name = table.table.getQualifiedNamePrefix(false);
                NamesAndTypesList columns = table.columns;
                tables_order.push_back(table_name);
                table_columns.emplace(std::move(table_name), std::move(columns));
            }
        }
        void addTableColumns(const String & table_name)
        {
            auto it = table_columns.find(table_name);
            if (it == table_columns.end())
                throw Exception("Unknown qualified identifier: " + table_name, ErrorCodes::UNKNOWN_IDENTIFIER);
            for (const auto & column : it->second)
                new_select_expression_list->children.push_back(
                    std::make_shared<ASTIdentifier>(std::vector<String>{it->first, column.name}));
        }
    };
    static bool needChildVisit(const ASTPtr &, const ASTPtr &) { return false; }