Erro com SELECT

Tenho o seguinte SELECT:

ps = conexao.prepareStatement("SELECT controle.id_empresa, controle.id_vendedor, empresas.nome AS nome_emp, " +
                            "empresas.cnpj, vendedor.nome AS nome_vend, vendedor.senha, vendedor.bloqueado, vendedor.utilizado " +
                            "FROM controle " + 
                            "LEFT OUTER JOIN empresas ON controle.id_empresa = empresas.id " +
                            "LEFT OUTER JOIN vendedor ON controle.id_vendedor = vendedor.id " +
                            "LEFT OUTER JOIN vendedor ON controle.id_empresa = vendedor.id_empresa " + 
                            "WHERE controle.chave = ?");

Mas dá esse erro:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Not unique table/alias: 'vendedor'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
    at com.mysql.jdbc.Util.getInstance(Util.java:387)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962)
    at com.softcom.dao.ControleDAO.listarPorChave(ControleDAO.java:43)

Minha estrutura é essa:
Tabela Empresas:
id
nome
cnpj

Tabela Vendedor:
id_empresa
id
nome
senha
bloqueado
utilizado

Tabela Controle:
id
id_empresa
id_vendedor
chave

O campo chave é unique portanto o SELECT que estou tentando fazer precisa retornar apenas um registro…

Quando uma tabela é mencionada mais de uma vez em um SELECT, você deve usar um alias para a tabela:

SELECT 
  controle.id_empresa, controle.id_vendedor, empresas.nome AS nome_emp,
  empresas.cnpj, v1.nome AS nome_vend, v1.senha, v1.bloqueado, v1.utilizado
FROM
  controle
LEFT OUTER JOIN empresas ON controle.id_empresa = empresas.id 
LEFT OUTER JOIN vendedor AS v1 ON controle.id_vendedor = v1.id
LEFT OUTER JOIN vendedor AS v2 ON controle.id_empresa = v2.id_empresa
WHERE controle.chave = ?

Dica, quando for montar uma query, faça o teste antes no console do BD, é mais fácil debugar a query assim do que dentro do programa.

rmendes08, esse select que você me mostrou não deu erro, mas me retornou o mesmo registro 8 vezes, sendo que tenho apenas um registro deste no banco.

Primeiro é preciso perceber o negócio. Porque precisas de cruzar duas vezes com a tabela vendedor? Não precisas apenas disto?

SELECT 
  controle.id_empresa, controle.id_vendedor, empresas.nome AS nome_emp,
  empresas.cnpj, vendedor.nome AS nome_vend, vendedor.senha, vendedor.bloqueado, vendedor.utilizado
FROM
  controle
LEFT OUTER JOIN empresas ON controle.id_empresa = empresas.id 
LEFT OUTER JOIN vendedor ON controle.id_vendedor = vendedor.id
WHERE controle.chave = ?