You have to use a projection, so create an entity query with the inner join and then join with that. However as I don't know what query system you want to use, it's best if you post what you have that fails, so we can extend/correct it.
something like: (QuerySpec)
var qf = new QueryFactory();
var innerJoinQ = qf.CloudProviderAccountLicensingPlanCloudProviderService
.From(QueryTarget.InnerJoin(qf.CloudProviderService)
.On(CloudProviderAccountLicensingPlanCloudProviderServiceFields.CloudProvierServiceID.Equal(CloudProviderServiceFields.CloudProvierServiceID)))
.As("cpalpcps");
var q = qf.CloudProvider
.From(QueryTarget.CloudProviderAccount
.InnerJoin ...
.InnerJoin...
.LeftJoin(innerJoinQ)
.On(CloudProviderAccountLicensingPlanCloudProviderServiceFields
.CloudProviderAccountLicensingPlanID.Source("cpalpcps").Equal(CloudProviderAccountLicensingPlanFields.Id)))
.Select(...)
You can also use linq for this, it's the same principle.
(edit) After posting I realized you can just change the inner join between CloudProviderAccountLicensingPlanCloudProviderService and CloudProviderService into a left join because if the CloudProviderAccountLicensingPlanCloudProviderService part is NULL due to the left join with CloudProviderAccountLicensingPlan, no row will be joined from CloudProviderService. I think the runtime even does this for you if you pass in an inner join, but have to check.
(edit2) The notification email bounced with an error: support is not authorized to relay messages through the server that reported this error.
This means our notification emails are blocked somewhere. In case you're wondering why they don't arrive, that's the reason