### Summary

Hi,

Firstly - it's probably rather strong to call this a bug - it's an inconsistency IMHO.

I have a situation where from time to time my `[production_targets]` group in my inventory in empty - for example:

```
[integration_targets]
dev-01
qa-01

[production_targets]

[targets:children]
integration_targets
production_targets

[targets:vars]
ansible_user=apprunner
```


My expectation was an empty group would result in Ansible doing nothing and returning success - after all, nothing has failed here.  This happens when the limit switch is not applied.

However, at least the way I've described my inventory above seems to lead to an error, specifically when I **limit** to an empty group:

```
ansible-playbook /path/to/deploy.yml -i /path/to/inventory.ini -l production_targets
```

I get an error not a warning:

**ERROR! Specified hosts and/or --limit does not match any hosts**

However it seems if I don't use the limit switch this isn't an error, just a warning:

**[WARNING]: No hosts matched, nothing to do**

I understand the logic in throwing an error (although I think a consistent warning would be less surprising, with and without use of limit) so if my approach is wrong, can you please advise how I can configure ansible to accept a lack of matches in the inventory when also using the limit switch, and move on without throwing an error?

Thanks!



### Issue Type

Bug Report

### Component Name

inventory

### Ansible Version

```console
ansible [core 2.11.9]
```


### Configuration

```console
$ ansible-config dump --only-changed
$
```


### OS / Environment

Ubuntu 18.04

### Steps to Reproduce


Make yourself an inventory file: callend inv.ini:

```
[integration_targets]
dev-01
qa-01

[production_targets]

[targets:children]
integration_targets
production_targets

[targets:vars]
ansible_user=apprunner
```

Then you can demonstrate the problem just using command line ansible

```
$ ansible targets -i inv.ini -a "ls" -l production_targets
ERROR! Specified hosts and/or --limit does not match any hosts
$ ansible production_targets -i inv.ini -a "ls"
[WARNING]: No hosts matched, nothing to do
```

### Expected Results

I'd expect no matches to give the same consistent error message, whether I apply a limit or not:

```
$ ansible targets -i inv.ini -a "ls" -l production_targets
[WARNING]: No hosts matched, nothing to do
$ ansible production_targets -i inv.ini -a "ls"
[WARNING]: No hosts matched, nothing to do
```

### Actual Results

```console
The first command given an ERROR not a WARNING which seems inconsistent to me:


$ ansible targets -i inv.ini -a "ls" -l production_targets
ERROR! Specified hosts and/or --limit does not match any hosts
$ ansible production_targets -i inv.ini -a "ls"
[WARNING]: No hosts matched, nothing to do
```
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
''' return full ansible version info '''
        if gitinfo:
            
            ansible_version_string = opt_help.version()
        else:
            ansible_version_string = __version__
        ansible_version = ansible_version_string.split()[0]
        ansible_versions = ansible_version.split('.')
        for counter in range(len(ansible_versions)):
            if ansible_versions[counter] == "":
                ansible_versions[counter] = 0
            try:
                ansible_versions[counter] = int(ansible_versions[counter])
            except Exception:
                pass
        if len(ansible_versions) < 3:
            for counter in range(len(ansible_versions), 3):
                ansible_versions.append(0)
        return {'string': ansible_version_string.strip(),
                'full': ansible_version,
                'major': ansible_versions[0],
                'minor': ansible_versions[1],
                'revision': ansible_versions[2]}
    @staticmethod
    def pager(text):