Basic knowledge: ID are UNIQUE, and only be used ONCE in an HTML document. They hold a lot of specificity, and tend so one should take care when using an ID even if you KNOW it's used once ( in other words, you can make a class that you use only in once in the html element, and not have wight of the rules be so heavy, specificity wise. by contrast Classes can be used multiple times.
As to your Qs
1)p#ID this targets only a P tag WITH the ID , eg <p id="ID"> but not <div id="ID"> or <ul id="ID">. If you KNOW for certain that #ID will only be applied to a P tag or don't need the extra weight to the rule ( and you shouldn't, when using an ID!) then you could just simply use #ID. However your style sheet may apply sitewise and the ID may be used on a P on one page and a UL in another, which may be the reason why you are seeing this.
note: you can similarly do: p.class
2)#ID p targets all Ps that are DESCENDANTS ( inside of) the element with the id of "ID". <div id="ID"><p>
3) Similar to the previous explanation, #ID .class targets all elements with class "class"that are DESCENDANTS ( inside of) the element with the id of "ID". <div id="ID"><ul class="class">
hope that helps