**Bug description**

Select from table with Engine=Set does not work with 2 joins.

**Affected version**

Reproduces on 21.3.15.4

**How to reproduce**

Creating base table and set table:

```sql
CREATE TABLE users (
  userid UInt64
)
ENGINE = MergeTree() ORDER BY (userid);
INSERT INTO users VALUES (1),(2),(3);

CREATE TABLE users_set (
  userid UInt64
)
ENGINE = Set;
INSERT INTO users_set VALUES (1),(2);

-- works
select * from users where userid in users_set;
```

Adding one more table and one more join:

```sql
CREATE TABLE user_names(
    userid UInt64,
    name String
) ENGINE = MergeTree() ORDER BY (userid);

INSERT INTO user_names VALUES (1, 'Batman'), (2, 'Joker'), (3, 'Superman');

-- still works
select userid, name 
from users any left join user_names on (users.userid = user_names.userid) 
where userid in users_set;
```

And one more table plus 2nd join breaks it:

```sql
CREATE TABLE user_real_names(
    uid UInt64,
    real_name String
) ENGINE = MergeTree() ORDER BY (uid);

INSERT INTO user_real_names VALUES (1, 'Bruce Wayne'), (2, 'Unknown'), (3, 'Clark Kent');

--DOES NOT WORK
select 
    users.userid,
    name,
    real_name
from users 
    any left join user_names on (users.userid = user_names.userid) 
    any left join user_real_names on (users.userid = user_real_names.uid)
where users.userid in users_set;
```

**Expected behavior**

Working query, just like with one or no joins. Expected output: 

```
1	Batman	Bruce Wayne
2	Joker	Unknown
```

**Error message and/or stacktrace**

```Unknown column name 'users_set': While processing SELECT```

const std::vector<TableWithColumnNamesAndTypes> & tables,
    const Aliases & aliases,
    const std::vector<ASTIdentifier *> & identifiers,
    const std::unordered_set<ASTIdentifier *> & public_identifiers,
    UniqueShortNames & unique_names)
{
    size_t last_table_pos = tables.size() - 1;
    NameSet restored_names;
    std::vector<TableNeededColumns> needed_columns;
    needed_columns.reserve(tables.size());
    for (const auto & table : tables)
        needed_columns.push_back(TableNeededColumns{table.table});
    for (ASTIdentifier * ident : identifiers)
    {
        bool got_alias = aliases.count(ident->name());
        bool allow_ambiguous = got_alias; 
        if (auto table_pos = IdentifierSemantic::chooseTableColumnMatch(*ident, tables, allow_ambiguous))
        {
            if (!ident->isShort())
            {
                if (got_alias)
                {
                    auto alias = aliases.find(ident->name())->second;
                    auto alias_ident = alias->clone();
                    alias_ident->as<ASTIdentifier>()->restoreTable();
                    bool alias_equals_column_name = alias_ident->getColumnNameWithoutAlias() == ident->getColumnNameWithoutAlias();
                    if (!alias_equals_column_name)
                        throw Exception("Alias clashes with qualified column '" + ident->name() + "'", ErrorCodes::AMBIGUOUS_COLUMN_NAME);