protected void handleJoinTarget(JoinExpression je) {
        // type specifier
        if (je.getTarget() instanceof RelationalPath && templates.isSupportsAlias()) {
            final RelationalPath<?> pe = (RelationalPath<?>) je.getTarget();
            if (pe.getMetadata().getParent() == null) {
                if (withAliases.contains(pe)) {
                    appendTableName(pe.getMetadata().getName(), false);
                    append(templates.getTableAlias());
                } else {
                    SchemaAndTable schemaAndTable = getSchemaAndTable(pe);
                    boolean precededByDot;
                    if (templates.isPrintSchema()) {
                        appendSchemaName(schemaAndTable.getSchema());
                        append(".");
                        precededByDot = true;
                    } else {
                        precededByDot = false;
                    }
                    appendTableName(schemaAndTable.getTable(), precededByDot);
                    append(templates.getTableAlias());
                }
            }
        }
        inJoin = true;
        handle(je.getTarget());
        inJoin = false;
    }
Return a list of expressions that can be used to uniquely define the query sources

@param joins
@return identifier columns
querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java