diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH3465/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH3465/Fixture.cs
new file mode 100644
index 00000000000..8d4b62bb325
--- /dev/null
+++ b/src/NHibernate.Test/Async/NHSpecificTest/GH3465/Fixture.cs
@@ -0,0 +1,31 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by AsyncGenerator.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+using System.Linq;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.GH3465
+{
+ using System.Threading.Tasks;
+ [TestFixture]
+ public class FixtureAsync : BugTestCase
+ {
+ [Test]
+ public void ThetaJoinSubQueryAsync()
+ {
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ var query = session.CreateQuery("select e.Id from EntityA e where exists (from e.Children b, EntityC c)");
+ Assert.DoesNotThrowAsync(() => query.ListAsync());
+ }
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3465/Entities.cs b/src/NHibernate.Test/NHSpecificTest/GH3465/Entities.cs
new file mode 100644
index 00000000000..3a325ed9ba8
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3465/Entities.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+
+namespace NHibernate.Test.NHSpecificTest.GH3465
+{
+ class EntityA
+ {
+ public virtual Guid Id { get; set; }
+ public virtual ISet Children { get; set; }
+ }
+ class EntityB
+ {
+ public virtual Guid Id { get; set; }
+ public virtual EntityA Parent { get; set; }
+ }
+ class EntityC
+ {
+ public virtual Guid Id { get; set; }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3465/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3465/Fixture.cs
new file mode 100644
index 00000000000..e51af1211d9
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3465/Fixture.cs
@@ -0,0 +1,20 @@
+using System.Linq;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.GH3465
+{
+ [TestFixture]
+ public class Fixture : BugTestCase
+ {
+ [Test]
+ public void ThetaJoinSubQuery()
+ {
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ var query = session.CreateQuery("select e.Id from EntityA e where exists (from e.Children b, EntityC c)");
+ Assert.DoesNotThrow(() => query.List());
+ }
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3465/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3465/Mappings.hbm.xml
new file mode 100644
index 00000000000..b89c139fa29
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3465/Mappings.hbm.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs b/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs
index a22c13e84ff..ade63aaa929 100644
--- a/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs
+++ b/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs
@@ -716,7 +716,7 @@ public void SetOrigin(FromElement origin, bool manyToMany)
JoinSequence.SetUseThetaStyle(true);
}
}
- else
+ else if (Walker.CurrentClauseType != HqlSqlWalker.FROM)
{
FromClause.AppendFromElement(this);
}